溫馨提示×

C++使用條件變量實現(xiàn)線程間通信

c++
小樊
85
2024-07-05 19:27:27
欄目: 編程語言

條件變量是C++中多線程編程中常用的同步機制之一,用于在線程之間進行通信和同步。條件變量通常與互斥鎖一起使用,以實現(xiàn)線程的等待和喚醒。

下面是一個簡單的示例,演示了如何使用條件變量來實現(xiàn)線程間通信:

#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;
}

在上面的示例中,主線程創(chuàng)建一個新的線程,并在2秒后將ready設(shè)置為true,然后通過cv.notify_one()通知等待的線程。子線程在等待期間通過cv.wait(lock)等待條件變量cv的通知,一旦收到通知,子線程將繼續(xù)執(zhí)行。

需要注意的是,在使用條件變量時,需要確保在等待條件變量之前持有std::unique_lock鎖,以確保線程安全。

希望這個示例能幫助你了解如何使用條件變量實現(xiàn)線程間通信。

0