在C++中,條件變量是一種同步原語(yǔ),用于在多線程環(huán)墫中協(xié)調(diào)線程的執(zhí)行順序。條件變量通常與互斥鎖一起使用,以防止多個(gè)線程同時(shí)訪問共享資源。
條件變量通過兩個(gè)主要函數(shù)來(lái)實(shí)現(xiàn):wait()和notify()。wait()函數(shù)會(huì)使當(dāng)前線程等待,直到另一個(gè)線程調(diào)用notify()函數(shù)喚醒它。notify()函數(shù)用于喚醒等待在條件變量上的線程。
下面是一個(gè)簡(jiǎn)單的示例,演示了如何使用條件變量:
#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;
}
在這個(gè)例子中,我們創(chuàng)建了一個(gè)線程并在其中調(diào)用thread_function()函數(shù)。在主線程中,我們改變了ready變量的值,并通過調(diào)用cv.notify_one()函數(shù)來(lái)喚醒在條件變量上等待的線程。
需要注意的是,條件變量的使用通常需要與互斥鎖一起使用,以確保在等待和通知過程中的線程安全。