在多線程中,條件變量(condition variable)是一種用于線程間通信的機制。條件變量通常與互斥鎖(mutex)一起使用,以實現對共享資源的線程安全訪問。
在C++中,條件變量通常是通過std::condition_variable
類來實現的。條件變量主要用于線程之間的同步,常見的用法包括等待某個條件的發生或者通知其他線程條件的發生。
下面是一個簡單的示例,演示了如何在多線程中使用條件變量:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void worker_thread() {
// 模擬一些工作
std::this_thread::sleep_for(std::chrono::seconds(1));
// 工作完成后通知主線程
{
std::lock_guard<std::mutex> lock(mtx);
ready = true;
}
cv.notify_one();
}
int main() {
std::thread worker(worker_thread);
// 等待工作完成
{
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, []{ return ready; });
}
std::cout << "Work completed!" << std::endl;
worker.join();
return 0;
}
在上面的示例中,主線程等待工作線程完成工作,工作線程完成工作后通知主線程。主線程使用條件變量cv
和互斥鎖mtx
來實現等待和通知的機制。