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