温馨提示×

C++ notify_all如何使用

c++
小樊
87
2024-07-21 10:55:02
栏目: 编程语言

在C++中,notify_all()函数通常是和条件变量一起使用的。条件变量(condition variable)是用于线程间通信的一种机制,它允许一个线程等待另一个线程满足特定条件后再继续执行。

在使用notify_all()函数时,通常需要先创建一个条件变量对象和一个互斥锁对象,然后使用互斥锁保护共享资源,当某个线程改变了共享资源的状态时,可以调用notify_all()函数通知其他等待的线程。

以下是一个简单的示例代码来演示如何使用notify_all()函数:

#include <iostream>
#include <thread>
#include <condition_variable>

std::condition_variable cv;
std::mutex mtx;
bool ready = false;

void worker_thread() {
    std::unique_lock<std::mutex> lck(mtx);
    // 等待条件变量满足
    cv.wait(lck, []{ return ready; });
    // 条件满足后执行的操作
    std::cout << "Worker thread is processing data." << std::endl;
}

int main() {
    std::thread worker(worker_thread);

    {
        std::lock_guard<std::mutex> lck(mtx);
        // 修改共享资源的状态
        ready = true;
    }

    // 通知所有等待的线程条件已满足
    cv.notify_all();

    worker.join();

    return 0;
}

在上面的示例中,worker_thread()函数通过等待条件变量的方式来等待条件满足,而在主线程中修改了ready变量的状态后,调用notify_all()函数通知worker_thread()线程条件已满足,从而执行后续操作。

需要注意的是,在使用notify_all()函数时,通常需要先获取互斥锁来保护共享资源,以防止多个线程同时修改共享资源导致数据竞争的问题。

0