提问人:jay 提问时间:7/26/2023 更新时间:7/26/2023 访问量:86
为什么 C++ 条件变量需要锁?
Why does a C++ conditional variable need a lock?
问:
如果我使用的是没有谓语的简历。我不太明白我们传入的unique_lock的用途。我检查了这个链接:为什么条件变量需要锁(因此也需要互斥锁)以及来自它的更多链接。
大多数解释都表明,互斥锁用于锁定传递到 CV 中的谓词。那么,如果我不使用谓词函数,为什么需要锁呢?
一个没有锁的假设代码可能看起来像这样:
condition_variable cv;
mutex dataMutex;
string sharedData;
atomic<bool> flag = false;
void doTask(){
while(!flagSet){ // To prevent spurious wake-up
cv.wait(); //Just wait, no lock/predicate passed in.
}
lock_guard<mutex> lock(dataMutex); //Get a lock and read shared data
cout << sharedData;
}
void createTask(){
lock_guard<mutex> lock(dataMutex); //Get a lock and update the shared data
sharedData = "abc";
flag = true;
cv.notify_all();
}
int main(){
thread a(doTask, 10);
sleep(seconds(5));
thread b = thread(createTask);
// Join the threads and return.
}
可能 cv 可以在内部使用互斥锁来同步等待和通知,但为什么它需要外部互斥锁。当我没有谓词时,谁能帮助理解外部锁的使用?
答: 暂无答案
评论
flag
wait