在阅读一本关于并发的书时,作者说信号量在 signal() 的工作方式上不同于条件变量。信号量会跟踪对 signal() 的调用次数,而条件变量则不会。 “在没有人等待时调用 pthread_cond_signal 没有任何效果”,它说。为什么这个细节很重要(我在不同的地方看到它重复了很多次)?对使用有何影响?谢谢
最佳答案
从概念上讲,一个信号量相当于一个互斥锁、条件变量和受互斥锁保护的整数计数器。在这个类比下,发布信号量等同于锁定互斥量、递增计数器、向条件变量发送信号并解锁互斥量。即使没有服务员,状态仍然被修改。
在这个类比下,信号量的等待者相当于:
- 锁定互斥量。
- 当计数为非正数时,等待条件变量。
- 递减计数。
- 解锁互斥锁。
当然,如果您谈论的是 POSIX 的特定情况,则类比并不完全符合现实,因为信号量具有额外的异步信号安全属性,无法使用互斥锁/条件变量/计数三元组来实现它们。
关于c - 在没有人等待时发出条件变量信号的意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13830349/