[英]std::condition_variable::notify_all() - I need an example
[英]std::condition_variable::notify_all() guarantees
假设条件变量上有N个等待线程(读取器),这些线程由另一个线程(生产者)通知。 现在所有的N个读者都会尝试拥有他们所引用的unique_lock,一次一个。 现在假设生产者想要再次锁定相同的unique_lock,出于某些原因,在任何那些醒来的读者甚至开始拥有锁之前。 按照标准,是否有保证生产者只有在所有通知读者开始锁定步骤后才能成功(尝试)进入其关键部分?
除了§1.10第2段给出的相当模糊之外,无法保证调度:
实现应确保所有未阻塞的线程最终取得进展。 [ 注意:标准库函数可能会静默阻塞I / O或锁定。 执行环境中的因素(包括外部强加的线程优先级)可能会阻止实现对前进进度做出某些保证。 - 结束说明 ]
如果您想确保没有读者在制作人之前获得锁定,您可以在通知之前获取锁定。
如果你想确保在所有的读者都用它做你需要一些更为复杂的同步,可能涉及某种计数器的生产者只能获得锁。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.