पर अधिसूचना कॉल करते समय मैं यह समझने की कोशिश कर रहा हूं कि म्यूटेक्स के साथ क्या होता है जब इसे किसी कंडीशन चर में उपयोग किया जाता है।एक म्यूटेक्स अनलॉक हो जाता है जब एक कंडीशन वैरिएबल
निम्न उदाहरण में, से 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();
}
निर्माता धागा cond_var.notify_one() म्युटेक्स अनलॉक हो गया हो जाता है इससे पहले कि कॉल ले लिया। जब म्यूटेक्स एम को अधिसूचित किया जाता है तो अनलॉक हो जाता है, या क्या अधिसूचना तब होती है जब म्यूटेक्स अनलॉक हो जाता है?
बिल्कुल क्या देख रहा था: डी –