假设我有这样的事情:
bool signalled = false;
std::condition_variable cv;
void thread1() {
while (true) {
std::unique_lock l(mutex);
cv.wait_until(l, [] { return signalled; });
return;
}
}
void thread2...N() {
signalled = true;
cv.notify_all();
}
那被认为是线程安全的吗?在许多线程中,可以将 bool 值设置为true来中断thread1。
编辑:如果不是线程安全的,我正在寻找有关竞赛条件的描述,以便我可以更好地理解根本问题并填补知识空白。
最佳答案
无需同步即可写入非原子变量。但是,将signalled
设置为atomic<bool>
将无法解决问题。std::condition_variable
上的C++ reference读取:
你应该做这个:
bool signalled = false;
void thread2...N()
{
std::unique_lock l(mutex);
signalled = true;
cv.notify_all();
}
相关问题: