温馨提示×

c++ wait能修改吗

c++
小樊
82
2024-11-24 04:48:41
栏目: 编程语言

在C++中,wait()函数本身不能直接修改,但您可以使用它来实现线程同步,从而间接地实现数据的修改。wait()函数通常与条件变量(如std::condition_variable)一起使用,以便在特定条件满足时唤醒等待的线程。

以下是一个简单的示例,展示了如何使用std::condition_variablestd::mutex来修改共享数据:

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

std::mutex mtx;
std::condition_variable cv;
int shared_data = 0;

void worker() {
    std::unique_lock<std::mutex> lock(mtx);
    cv.wait(lock, []{ return shared_data != 0; }); // 等待共享数据不为0

    // 在此处修改共享数据
    shared_data = 42;

    // 通知其他等待的线程
    cv.notify_all();
}

int main() {
    std::thread t1(worker);
    std::thread t2(worker);

    t1.join();
    t2.join();

    std::cout << "Shared data: " << shared_data << std::endl;

    return 0;
}

在这个示例中,我们使用std::condition_variable来确保在修改共享数据(shared_data)之前,所有等待的线程都已经进入等待状态。当shared_data变为非零值时,条件变量会通知所有等待的线程,它们将醒来并继续执行,从而可以安全地修改共享数据。

0