Zephyr官方文档翻译 – 信号量

信号量

可以定义任意数量的信号量(受限于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

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!