gpt4 book ai didi

c++ - std::condition_variable 的谓词是否在锁下执行?

转载 作者:搜寻专家 更新时间:2023-10-31 01:02:41 25 4
gpt4 key购买 nike

由于条件变量可以检查给定的谓词是否为真,并且只有在它为真时才返回(如下面的代码片段),条件变量中是否包含在锁保护内运行的谓词(mutex m 在下面的片段中)?

std::condition_variable cv;
std::mutex m;
std::unique_lock<std::mutex> lk;

cv.wait(lk, []{/*predicate*/});

最佳答案

调用 cv.wait(lk, p) 由 [thread.condition.condvar] 定义为等效于:

while (!p())
cv.wait(lk);

此外,wait的前提是调用线程持有锁。因此,是的,谓词检查确实发生在锁下。

除此行为之外的任何其他行为都没有多大意义,因为否则检查谓词会产生数据竞争,除非您为谓词提供单独同步机制。

关于c++ - std::condition_variable 的谓词是否在锁下执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26772342/

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