std::condition_variable是C++标准库中的一个线程同步原语,用于实现线程间的条件变量通信。下面简要讲解其用法。

首先,使用std::condition_variable之前,需要包含头文件<condition_variable>。

  1. 创建std::condition_variable对象
    可以通过以下方式创建std::condition_variable对象:

    std::condition_variable cv;
  2. 创建std::mutex对象
    std::condition_variable需要与std::mutex配合使用,用于保护共享数据的访问。

    std::mutex mtx;
  3. 等待条件满足
    在某个线程中,可以通过调用std::condition_variablewait()成员函数来等待条件满足。wait()函数会自动释放锁,并使线程进入等待状态,直到其他线程调用notify_one()notify_all()函数来唤醒等待的线程。

    std::unique_lock<std::mutex> lock(mtx);
    cv.wait(lock);  // 等待条件满足
  4. 唤醒等待的线程
    在另一个线程中,可以通过调用std::condition_variablenotify_one()notify_all()成员函数来唤醒等待的线程。notify_one()函数会唤醒至少一个等待的线程,而notify_all()函数会唤醒所有等待的线程。

    cv.notify_one();  // 唤醒至少一个等待的线程
    // 或
    cv.notify_all();  // 唤醒所有等待的线程
  5. 条件满足时通知等待的线程
    在某个线程中,当条件满足时,可以通过调用std::condition_variablenotify_one()notify_all()函数来通知等待的线程。

    std::unique_lock<std::mutex> lock(mtx);
    // 满足条件后,通知等待的线程
    cv.notify_one();

注意: 在使用std::condition_variable时,通常需要结合std::unique_lock<std::mutex>来进行锁的管理,以确保线程安全。


Totn
10 声望5 粉丝

幼稚也没关系,去实践,去经历,去思考!