std::condition_variable::notify_all() guarantees
std::condition_variable::notify_all() guarantees
假设一个条件变量上有 N 个等待线程(读取器),这些线程由另一个线程(生产者)通知。现在,所有 N 读者将继续尝试拥有他们所引用的unique_lock,一次一个。现在假设生产者出于某些原因想要再次锁定相同的unique_lock,在任何那些醒来的读者甚至开始拥有锁之前。按照标准,是否有任何保证生产者只有在所有通知的读者开始锁定步骤后才能成功(尝试)进入其关键部分?
除了
§1.10第2段中给出的相当模糊的时间表外,没有关于调度的保证:
实现应确保所有未阻塞的线程最终 捗。[ 注意:标准库函数可能会静默阻止 在 I/O 或锁上。执行环境中的因素,包括 外部强加的线程优先级,可能会阻止实现 从对前进的进展做出某些保证。—尾注 ]
如果要确保没有读取器在生产者之前获取锁,则只需在通知之前获取锁即可。
如果你想确保生产者只能在所有读卡器完成锁后才能获取锁,你需要一些更复杂的同步,可能涉及某种计数器。
相关文章:
- 方法错误"not all control paths return a value"和方法不返回值
- 生成文件:6:目标'all'的配方在 Ubuntu-16.04 上失败
- 每次都会重建多个程序的制作文件,尽管配方"all"被标记为虚假
- 制造:对'all'错误无能为力
- 为什么Eigen不能解析内置符号?(all、last、seq等)
- 警告"C++ requires a type specifier for all declaration"地图
- gcc -O2 比 gcc -O2 -g 小,后跟 strip --strip-all
- 警告:"Not all control paths return a value" c++
- AVX2浮子比较并获得0.0或1.0,而不是all-0或全零件
- 链接时,"grab what you need" 和 "grab all" 之间是否有某些内容(-wl,--whole-archive)?
- 在C++中向枚举添加"all"选项的好设计是什么?
- 级运算符 ( "C++ requires a type specifier for all declarations" )
- gradle see output for model.components.binaries.all
- "uses of target_link_libraries must be either all-keyword or all-plain"
- SFINAE 功能的"catch-all"?
- 柯尼希查找和"C++ requires a type specifier for all declarations"
- "All arguments to functions are passed by value" C 中的,C++ 中对引用传递的混淆
- Axpection_ptr在All Handler中的奇特在CentOS 7和Windows上都奇怪地工作
- Autotools Automake生成的Makefile无效:使All-Am
- C++ - 错误:为 OpenCV 的 cv::标量::all 创建 C 包装器时出现预期的类型说明符