ThreadX学习(6)——信号量
学习参考
- 《Real-Time Embedded Multithreading: Using ThreadX and ARM》
(链接:https://pan.baidu.com/s/1GMScXSlHq13yS4AVxP_zPw 提取码:ysuw )
信号量
有两种操作会影响计数信号量的值:tx_semaphore_get和tx_semaphore_put。get操作将信号量减少1。如果信号量为0,则get操作失败。与get操作相反的是put操作,它将信号量增加1。
二值信号量
与互斥锁一样,信号量也经常用于互斥,把信号量的计数设为1即可。
这种信号量称为二值信号量。但信号量不支持所有权,而所有权是互斥锁的核心概念。
所以线程不能对它已经控制的信号量再执行get操作,第二个get会失败,并可能无限期地挂起线程,使资源永久不可用。
二值信号量与互斥锁最大的区别,就是前者不支持优先级继承,而后者支持并能解决优先级反转的问题。
即便如此,信号量更加通用,还可以用于事件通知和线程间同步。且信号量速度快于互斥锁。
事件通知
计数信号量还可以用于事件通知,就像在生产者-消费者应用程序中一样。
在这个应用程序中,使用者尝试在“消耗”资源(比如队列中的数据)之前获得计数信号量;每当生产者提供一些可用的东西时,它就增加信号量计数。换句话说,生产者将实例放置在信号量中,而消费者尝试从信号量中获取实例。
这类信号量的初始值通常为0,直到生产者为消费者准备好一些东西时才会增加。
API
1.tx_semaphore_create
TX_SEMAPHORE semaphore_ptr; //先定义再创建
UINT tx_semaphore_create( TX_SEMAPHORE *semaphore_ptr,

本文详细介绍了ThreadX中信号量的概念及其应用场景,包括计数信号量、二值信号量及事件通知等。同时,还提供了六个核心API的使用说明。
——信号量&spm=1001.2101.3001.5002&articleId=118223142&d=1&t=3&u=628a1707737c403ebefb2659ba198d0e)
1384

被折叠的 条评论
为什么被折叠?



