C++中的條件變量(condition variable)是一種同步原語,用于在多線程環境中實現線程間的等待和通知機制
示例:
// 使用多個鎖和條件語句
std::mutex mtx1, mtx2;
std::condition_variable cv1, cv2;
bool ready = false;
// 線程1
{
std::unique_lock<std::mutex> lock1(mtx1);
cv1.wait(lock1, [] { return ready; });
// 處理數據
}
// 線程2
{
std::unique_lock<std::mutex> lock2(mtx2);
ready = true;
cv2.notify_one();
}
使用條件變量后:
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
// 線程1
{
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, [] { return ready; });
// 處理數據
}
// 線程2
{
std::unique_lock<std::mutex> lock(mtx);
ready = true;
cv.notify_one();
}
std::future
和std::promise
進行線程間通信:std::future
和std::promise
提供了一種更簡潔的方法來實現線程間的同步和數據傳遞。通過使用這些工具,可以避免顯式地使用鎖和條件變量。示例:
// 使用std::future和std::promise
std::promise<void> prom;
std::future<void> fut = prom.get_future();
std::thread t([&] {
// 等待數據
fut.wait();
// 處理數據
});
// 設置數據
prom.set_value();
t.join();
總之,條件變量可以幫助您簡化多線程代碼,使其更易于理解和維護。在實際編程中,應根據具體場景選擇合適的同步原語,如條件變量、互斥鎖、std::future
和std::promise
等。