c++条件变量
条件变量是用于线程间同步的一种机制,它允许一个或多个线程在某个条件满足之前等待,并在条件满足时通知等待的线程继续执行。以下是条件变量的基本使用方法,包括 notify_one
和 notify_all
的作用。
使用条件变量的基本步骤
-
创建条件变量和互斥量:首先需要创建一个
std::condition_variable
和一个互斥量(std::mutex
)来保护共享数据。 -
等待条件:使用
std::unique_lock<std::mutex>
获取互斥量的锁,然后调用wait
方法等待条件变量的通知。 -
通知其他线程:在某个线程修改了共享数据并改变了条件后,可以使用
notify_one
或notify_all
来通知等待的线程。
notify_one vs notify_all
-
notify_one:仅唤醒一个等待的线程。如果有多个线程在等待条件变量,这个函数只会唤醒其中一个。这通常用于有多个消费者线程且只需要唤醒一个消费者的场景。
-
notify_all:唤醒所有等待的线程。所有等待的线程会被唤醒,只有一个会获得锁并继续执行,其他线程会在争夺锁时被阻塞。这适用于你希望所有线程都重新检查条件的场景。
总结
条件变量是实现线程间同步的重要工具,能够有效管理生产者-消费者模型等多种线程间协调的场景。使用时,确保适当的锁定和解锁顺序,以避免数据竞争和死锁问题。