Tôi đang cố gắng hiểu điều gì xảy ra với một mutex khi nó được sử dụng trong biến điều kiện.hiện một mutex được mở khóa khi gọi thông báo trên biến điều kiện
Trong ví dụ sau, lấy từ cppreference
int main()
{
std::queue<int> produced_nums;
std::mutex m;
std::condition_variable cond_var;
bool done = false;
bool notified = false;
std::thread producer([&]() {
for (int i = 0; i < 5; ++i) {
std::this_thread::sleep_for(std::chrono::seconds(1));
std::unique_lock<std::mutex> lock(m);
std::cout << "producing " << i << '\n';
produced_nums.push(i);
notified = true;
cond_var.notify_one();
}
done = true;
cond_var.notify_one();
});
std::thread consumer([&]() {
std::unique_lock<std::mutex> lock(m);
while (!done) {
while (!notified) { // loop to avoid spurious wakeups
cond_var.wait(lock);
}
while (!produced_nums.empty()) {
std::cout << "consuming " << produced_nums.front() << '\n';
produced_nums.pop();
}
notified = false;
}
});
producer.join();
consumer.join();
}
Nhà sản xuất chủ đề kêu gọi cond_var.notify_one() trước khi mutex được mở khóa. Liệu mutex m có được mở khóa khi thông báo được gọi hay không, hoặc thông báo chỉ xảy ra khi mutex được mở khóa?
chính xác những gì đang tìm kiếm: D –