คำถามติดแท็ก condition-variable

10
เหตุใดฟังก์ชันตัวแปรเงื่อนไขของ pthreads จึงจำเป็นต้องมี mutex
ฉันอ่านบนpthread.h; ฟังก์ชันเงื่อนไขที่เกี่ยวข้องกับตัวแปร (เช่นpthread_cond_wait(3)) ต้องการ mutex เป็นอาร์กิวเมนต์ ทำไม? เท่าที่ผมสามารถบอกได้ว่าผมจะได้รับการสร้าง mutex เพียงเพื่อใช้เป็นข้อโต้แย้งที่? Mutex นั้นควรทำอะไร?

6
ฉันต้องได้รับการล็อคก่อนที่จะเรียก condition_variable.notify_one () หรือไม่
ฉันสับสนเล็กน้อยเกี่ยวกับการใช้std::condition_variable. ฉันเข้าใจว่าฉันต้องสร้างunique_lockบนก่อนที่จะเรียกmutex condition_variable.wait()สิ่งที่ฉันไม่สามารถหาคือว่าฉันควรจะได้รับการล็อคที่ไม่ซ้ำกันก่อนที่จะเรียกหรือnotify_one()notify_all() ตัวอย่างในcppreference.comขัดแย้งกัน ตัวอย่างเช่นหน้าแจ้งเตือนให้ตัวอย่างนี้: #include <iostream> #include <condition_variable> #include <thread> #include <chrono> std::condition_variable cv; std::mutex cv_m; int i = 0; bool done = false; void waits() { std::unique_lock<std::mutex> lk(cv_m); std::cout << "Waiting... \n"; cv.wait(lk, []{return i == 1;}); std::cout << "...finished waiting. i == 1\n"; done = true; } …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.