释放信号量 tx_sp.c

UINT  _tx_semaphore_put(

        TX_SEMAPHORE *semaphore_ptr)

局部变量:

        

1.如果tx_semaphore_suspension_list挂起队列为空,那么直接把tx_semaphore_count计数器加一

2.如果suspension list不为空,那么suspension list最前面线程获取释放的信号量,并恢复线程。

_tx_semaphore_put函数在释放信号量时并没有检查当前释放信号量的线程是不是线程的拥有者,信号量并没有所有权属性,任何线程都可以释放信号量。

这种特性可以用来进行事件通知,比如一个线程不断等待信号量,成功后处理任务;另一个线程,进行信号量释放。


流程:

1.禁止中断

2.若suspension list不为空

        (1) 将线程从suspension list中移除

        (2) suspended count--

        (3) cleanup=NULL

        (4) 禁止抢占

        (5) 恢复中断

        (6) 根据需要关闭timer

        (7) status=success

        (8) 恢复线程

        (9) 返回success

3.若suspension list为空 //没有线程挂起等待信号量

        semaphore count++

4.恢复中断

5.返回success

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值