互斥量与条件变量代码示例
时间: 2024-05-17 09:16:20 浏览: 93
C++ Qt 创建多线程,控制6组ABB输出到UI界面上,使用moveToThread方式,配合互斥锁条件变量代码示例
下面是一个简单的代码示例,展示了互斥量和条件变量的基本使用方法:
```c++
#include <iostream>
#include <thread>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool isReady = false;
void producer() {
std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟生产过程
std::lock_guard<std::mutex> lock(mtx);
isReady = true;
cv.notify_one(); // 通知等待的消费者线程
}
void consumer() {
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, [] { return isReady; }); // 等待生产者线程的通知
std::cout << "Consumer thread received the notification." << std::endl;
}
int main() {
std::thread producerThread(producer);
std::thread consumerThread(consumer);
producerThread.join();
consumerThread.join();
return 0;
}
```
在上述示例中,我们有一个生产者线程和一个消费者线程。生产者线程在一段时间后将isReady设置为true,并通过条件变量cv通知消费者线程。消费者线程将在等待条件变量时被阻塞,直到收到生产者线程的通知后才继续执行。
请注意,使用互斥量mtx对共享变量isReady进行保护,以确保在并发访问时的正确性和一致性。
这只是一个简单的示例,实际使用中可能需要更复杂的逻辑和更多的线程管理。但希望这个示例能给你提供一个基本的理解和起点。
阅读全文