在C++中,條件變量是一種同步原語,用于在多線程環墫中協調線程的執行順序。條件變量通常與互斥鎖一起使用,以防止多個線程同時訪問共享資源。
條件變量通過兩個主要函數來實現:wait()和notify()。wait()函數會使當前線程等待,直到另一個線程調用notify()函數喚醒它。notify()函數用于喚醒等待在條件變量上的線程。
下面是一個簡單的示例,演示了如何使用條件變量:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void thread_function()
{
std::unique_lock<std::mutex> lck(mtx);
while (!ready)
{
cv.wait(lck);
}
std::cout << "Thread is now running!" << std::endl;
}
int main()
{
std::thread t(thread_function);
// Do some work
{
std::lock_guard<std::mutex> lck(mtx);
ready = true;
}
cv.notify_one();
t.join();
return 0;
}
在這個例子中,我們創建了一個線程并在其中調用thread_function()函數。在主線程中,我們改變了ready變量的值,并通過調用cv.notify_one()函數來喚醒在條件變量上等待的線程。
需要注意的是,條件變量的使用通常需要與互斥鎖一起使用,以確保在等待和通知過程中的線程安全。