[交流吐槽] 【物联网程学习课堂笔记】关于《名师讲堂:LiteOS内核实战教程》的学习3.2>信号量的运作机制

运作原理

1、信号量初始化,为配置的N个信号量申请内存(N值可以由用户自行配置,受内存限制),并把所有的信号量初始化成未使用,并加入到未使用链表中供系统使用。

2、信号量创建,从未使用的信号量链表中获取一个信号量资源,并设定初值。

3、信号量申请,若其计数器值大于0,则直接减1返回成功。否则任务阻塞,等待其它任务释放该信号量,等待的超时时间可设定。当任务被一个信号量阻塞时,将该任务挂到信号量等待任务队列的队尾。

4、信号量释放,若没有任务等待该信号量,则直接将计数器加1返回。否则唤醒该信号量等待任务队列上的第一个任务。

5、信号量删除,将正在使用的信号量置为未使用信号量,并挂回到未使用链表。

6、信号量允许多个任务在同一时刻访问同一资源,但会限制同一时刻访问此资源的最大任务数目。访问同一资源的任务数达到该资源的最大数量时,会阻塞其他试图获取该资源的任务,直到有任务释放该信号量。


信号量运作示意图

image.png