信号量
可以定义任意数量的信号量(受限于RAM)。每个信号量通过其内存地址进行引用。
信号量的关键属性如下:
-
计数值:信号量可以被获取的次数。计数为零表示该信号量不可用。
-
边界值:信号量的计数器能达到的最大值。
信号量必须先初始化再使用。信号量的计数必须被初始化为非负值,且小于等于边界值。
信号量可以在线程或中断中进行释放(give) 。释放信号量会使其计数递增,直到计数达到上限。
线程可以获取(take) 信号量。获取信号量时其计数会递减,除非信号量无效(例如为零)。当信号量不可用时,线程可以等待,直到获取到信号量。多个线程可以同时等待某个无效的信号量。当信号量可用时,它会被优先级最高的、等待时间最久的线程获取到。
注意:
可以初始化一个full信号量(计数值等于最大值),用来限制某段代码的并发执行数量。也可以初始化一个空信号量(计数值为0),用来阻塞线程,直到该信号量释放。
注意:
内核允许在中断服务函数中获取信号量,但当信号量无效时,不能在中断服务函数中阻塞等待该信号量。
原文链接:
https://docs.zephyrproject.org/latest/kernel/services/synchronization/semaphores.html
原文始发于微信公众号(TreeNewBeer):Zephyr官方文档翻译 – 信号量
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/115031.html