温馨提示×

C++实现线程同步的notify_all

c++
小樊
94
2024-07-21 11:00:05
栏目: 编程语言

在C++中,可以使用std::condition_variable来实现线程同步的notify_all操作。以下是一个简单的示例代码:

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

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

void worker_func(int id) {
    std::unique_lock<std::mutex> lock(mtx);
    cv.wait(lock, []{ return ready; });

    std::cout << "Worker " << id << " is working" << std::endl;
}

int main() {
    std::thread workers[3];

    for (int i = 0; i < 3; i++) {
        workers[i] = std::thread(worker_func, i);
    }

    {
        std::lock_guard<std::mutex> lock(mtx);
        ready = true;
    }
    cv.notify_all();

    for (int i = 0; i < 3; i++) {
        workers[i].join();
    }

    return 0;
}

在上面的代码中,我们创建了一个std::condition_variable对象cv来实现线程同步。在worker_func函数中,线程会等待在cv上,直到ready变量变为true,然后才会执行工作。在主函数中,我们使用std::lock_guard来保护ready变量的修改,并使用cv.notify_all()通知所有等待在cv上的线程可以继续执行了。最后,我们使用join()函数等待所有线程执行完毕。

希望这个例子可以帮助理解如何在C++中使用std::condition_variable来实现线程同步的notify_all操作。

0