在C++中,condition_variable(條件變量)是一種同步原語,用于線程之間的通信和協調。它允許線程等待條件滿足,以進行進一步的執行。
condition_variable的用法如下:
std::condition_variable cv;
std::unique_lock<std::mutex> lock(mutex); // 先獲取互斥鎖
cv.wait(lock); // 等待條件滿足
線程可以在wait()調用處阻塞,直到其他線程調用notify_one()或notify_all()通知條件的滿足。
cv.notify_one(); // 通知一個等待的線程條件滿足
cv.notify_all(); // 通知所有等待的線程條件滿足
這些通知會喚醒等待中的線程,使其開始執行。
std::unique_lock<std::mutex> lock(mutex);
cv.wait_for(lock, std::chrono::seconds(5)); // 最多等待5秒鐘
wait_for()函數允許線程在等待一段時間后繼續執行,無論條件是否滿足。
需要注意的是,condition_variable通常與一個互斥鎖(mutex)一起使用,以確保線程之間的同步和數據的正確訪問。對于等待條件的線程,它們需要先獲取互斥鎖,然后在等待之前釋放互斥鎖,以防止死鎖的發生。
總結來說,condition_variable用于線程間等待和通知條件滿足的機制,能夠提供線程間的同步和協調,使得線程能夠更有效地進行并發操作。