gpt4 book ai didi

c++ - std::condition_variable::notify_all() 保证

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:46:52 27 4
gpt4 key购买 nike

假设一个条件变量上有 N 个等待线程(读者),它们被另一个线程(生产者)通知。现在,所有 N 个读者都将尝试拥有他们引用的 unique_lock,一次一个。现在假设生产者出于某些原因想要再次锁定同一个 unique_lock,甚至在任何被唤醒的读者开始拥有锁之前。按照标准,只有在所有被通知的读者都开始锁定步骤后,生产者才能成功(尝试)进入其临界区吗?

最佳答案

除了 §1.10 第 2 段中给出的相当模糊的调度之外,没有关于调度的保证:

Implementations should ensure that all unblocked threads eventually make progress. [ Note: Standard library functions may silently block on I/O or locks. Factors in the execution environment, including externally-imposed thread priorities, may prevent an implementation from making certain guarantees of forward progress. —end note ]

如果你想确保没有读者在生产者之前获得锁,你可以简单地在通知之前获得锁。

如果您想确保生产者只能在所有读者使用完锁后才能获取锁,您需要一些更复杂的同步,可能涉及某种计数器。

关于c++ - std::condition_variable::notify_all() 保证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13932525/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com