繁体   English   中英

std :: condition_variable :: notify_all()保证

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM