ThreadX学习(6)——信号量

本文详细介绍了ThreadX中信号量的概念及其应用场景,包括计数信号量、二值信号量及事件通知等。同时,还提供了六个核心API的使用说明。

学习参考

信号量

有两种操作会影响计数信号量的值: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, 
				
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值