使用条件变量实现线程同步:C++实战指南
在多线程编程中,线程同步是确保程序正确性和稳定性的关键。条件变量(condition variable)是一种强大的同步原语,用于在线程之间进行协调,避免数据竞争和死锁。本文将详细介绍如何在C++中使用条件变量实现线程同步,并提供完整的代码示例和详细的解释。
什么是条件变量?
条件变量是一种同步机制,允许线程在某个条件满足之前进入等待状态,并在条件满足时被唤醒。条件变量通常与互斥锁(mutex)一起使用,以确保对共享资源的安全访问。
条件变量的基本用法
在C++11中,条件变量由std::condition_variable
类提供。其基本用法如下:
-
创建条件变量和互斥锁:
std::condition_variable cv; std::mutex mtx;
-
等待条件满足:
std::unique_lock<std::mutex> lock(mtx); cv.wait(lock, []{ return condition; });
-
通知等待的线程:
cv.notify_one(); // 唤醒一个等待的线程 cv.notify_all(); // 唤醒所有等待的线程
实现生产者-消费者模型
为了展示条件变量的实际应用,我们将实现一个简单的生产者-消费者模型。生产者线程生成数据并将其放入缓冲区,而消费者线程从缓冲区中取出数据进行处理。条件变量用于协调生产者和消费者之间的操作。
代码实现
以下是一个完整的C++代码示例,展示如何使用条件变量实现生产者-消费者模型:
#include <iostream>
#include <queue>
#include <thread>
#include <mutex>
#include<