c - 在没有人等待时发出条件变量信号的意义?

标签 c concurrency semaphore condition-variable

在阅读一本关于并发的书时,作者说信号量在 signal() 的工作方式上不同于条件变量。信号量会跟踪对 signal() 的调用次数,而条件变量则不会。 “在没有人等待时调用 pthread_cond_signal 没有任何效果”,它说。为什么这个细节很重要(我在不同的地方看到它重复了很多次)?对使用有何影响?谢谢

最佳答案

从概念上讲,一个信号量相当于一个互斥锁、条件变量和受互斥锁保护的整数计数器。在这个类比下,发布信号量等同于锁定互斥量、递增计数器、向条件变量发送信号并解锁互斥量。即使没有服务员,状态仍然被修改。

在这个类比下,信号量的等待者相当于:

  1. 锁定互斥量。
  2. 当计数为非正数时,等待条件变量。
  3. 递减计数。
  4. 解锁互斥锁。

当然,如果您谈论的是 POSIX 的特定情况,则类比并不完全符合现实,因为信号量具有额外的异步信号安全属性,无法使用互斥锁/条件变量/计数三元组来实现它们。

关于c - 在没有人等待时发出条件变量信号的意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13830349/

相关文章:

c - Linux shell 不执行我的 c 程序

java - 同步 int、long 或 String 值以及 AND/OR 选项?

Java 执行器 : how can I set task priority?

java - 为什么不允许 ReadWriteLock 升级?

C:线程 semaphore_wait 与 while 循环

C: IFS System() 漏洞

c - 无法使用从 fgets 输入的字符串搜索字符

c - 如何strtok保存在数组中的字符串并将其保存到c中的三个不同的数组中?

c - 信号量无法正常工作

php - 如何正确使用PHP5信号量?