为什么条件变量需要锁定(因此也需要静音)
Why does a condition variable need a lock (and therefore also a mutex)
条件变量是C 11的方面之一,我仍然在努力。根据我收集的条件变量,变量与信号量非常相似。
但是,再次,信号量不需要锁才能函数。条件变量确实可以。又有一个锁需要一个静音。因此,为了使用信号量相当简单的功能,我们现在不仅需要管理条件变量。还有一个静音和锁。
那么为什么条件变量需要这个呢?以及通过添加此要求提供了什么添加功能?
条件变量通常用于发出状态变化。通常需要一个静音来进行变化,并且以下信号原子。
信号量与信号机制一起封装了某些状态(标志或计数器)。条件变量更原始,仅提供信号。
通常,一旦您发出信号变更(通过条件变量),您需要运行一些代码才能处理该更改,并且该代码必须安全地读取更改的数据。如果您没有与CV关联的锁,那么您的线程在CV上可能会醒来,然后尝试(并且失败)获取与数据关联的锁定,因此必须再次产生。使用简历/锁组合组合,基础系统只有在线程可以获取相关锁定并更有效的情况下,才能将线程唤醒。
。它本身不可能单独使用简历,因为它没有给出以上发出信号的数据。如果您想象使用简历 - 例如与生产者和消费者的线程安全链接列表,则您的变量代表{list, cv, lock}
。在这种情况下,您取锁,突变列表,释放锁,然后向简历发出信号。在您的消费者线程上,您很可能需要一旦发出信号才能在列表上采取行动,因此,一旦您从信号的CV醒来就获得了锁,这是A good Thing 。。
查看Windows(:: createEvent)上的事件,它是没有隐式锁定的简历,很多时候它们会与它们相关联,但没有内置在实际用法中。
尽管这不是创建pthreads中的原始原因条件变量(他们使用锁来保护CV本身,而CV本身不再需要C 中需要的CV本身),其锁的原因和有用性已迁移到此答案中的内容。。
- 基于模板值的条件变量
- 没有超时的C++条件变量
- 在条件变量中触发错误信号的频率是多少
- 在通知提升间处理条件变量时未按住锁会导致问题
- 通知条件变量后使用互斥锁
- 滥用条件变量
- 升压插值条件变量可以虚假唤醒吗?
- 子线程中的条件变量等待停止主线程中的执行
- 条件变量基本示例
- 正在连接的等待条件变量的线程会发生什么情况?
- C++11如何在1个线程中使用条件变量处理2个线程安全队列
- 当线程处理不同的类时,应该在哪里声明条件变量、互斥对象
- 为什么在同一条件变量上使用多个互斥锁会使此代码崩溃?
- 条件变量:wait_for.gcc错误
- 如何"stop"正在等待条件变量的分离线程?
- 如何杀死被条件变量锁定的线程?
- 使用互斥锁和条件变量作为成员时如何修复"use of deleted function"?
- C++ 多个使用者线程卡在条件变量上
- POSIX 条件变量和互斥体"竞争"
- 将cpp_redis pub/sub与条件变量一起使用时出现问题