C++中的條件變量(condition variable)是一種線程同步機制,用于在多線程編程中控制線程的執行順序和通信。正確使用條件變量需要遵循以下步驟:
創建條件變量對象:使用std::condition_variable類創建條件變量對象。
創建互斥量對象:使用std::mutex類創建互斥量對象,用于保護共享數據。
在需要等待某個條件的線程中,通過std::unique_lockstd::mutex對象鎖住互斥量。
調用std::condition_variable的wait()方法等待條件的發生,同時釋放互斥量,使得其他線程可以訪問共享數據。
在滿足條件時,通過notify_one()或notify_all()方法通知等待的線程。
以下是一個簡單的示例代碼:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void worker_thread()
{
std::unique_lock<std::mutex> lck(mtx);
cv.wait(lck, [] { return ready; });
std::cout << "Worker thread is processing data" << std::endl;
}
int main()
{
std::thread worker(worker_thread);
{
std::lock_guard<std::mutex> lck(mtx);
ready = true;
}
cv.notify_one();
worker.join();
return 0;
}
在上述示例中,worker_thread函數通過條件變量cv等待ready變量為true,主線程在修改ready后通過notify_one()通知worker_thread線程。