深入理解c++ condition機(jī)制

c++
小樊
97
2024-07-24 13:35:11

在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)喚醒在條件變量上等待的線程。

需要注意的是,條件變量的使用通常需要與互斥鎖一起使用,以確保在等待和通知過程中的線程安全。

0