條件變量是C++中多線程編程中常用的同步機制之一,用于在線程之間進行通信和同步。條件變量通常與互斥鎖一起使用,以實現線程的等待和喚醒。
下面是一個簡單的示例,演示了如何使用條件變量來實現線程間通信:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void thread_func() {
std::unique_lock<std::mutex> lock(mtx);
while (!ready) {
cv.wait(lock);
}
std::cout << "Thread is ready!" << std::endl;
}
int main() {
std::thread t(thread_func);
std::this_thread::sleep_for(std::chrono::seconds(2));
{
std::lock_guard<std::mutex> lock(mtx);
ready = true;
}
cv.notify_one();
t.join();
return 0;
}
在上面的示例中,主線程創建一個新的線程,并在2秒后將ready
設置為true
,然后通過cv.notify_one()
通知等待的線程。子線程在等待期間通過cv.wait(lock)
等待條件變量cv
的通知,一旦收到通知,子線程將繼續執行。
需要注意的是,在使用條件變量時,需要確保在等待條件變量之前持有std::unique_lock
鎖,以確保線程安全。
希望這個示例能幫助你了解如何使用條件變量實現線程間通信。