[C++11 多线程同步] --- 条件变量的那些坑条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)
Posted Overboom
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C++11 多线程同步] --- 条件变量的那些坑条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)相关的知识,希望对你有一定的参考价值。
1 条件变量的信号丢失
1.1 条件变量的信号丢失场景重现
拿生产者和消费者模型举例,看一段示例代码:
#include <iostream>
#include <vector>
#include <mutex>
#include <condition_variable>
#include <thread>
#include <unistd.h>
std::mutex mutex;
std::condition_variable cv;
std::vector<int> vec;
void consumer()
sleep(1);
std::unique_lock<std::mutex> lock(mutex);
std::cout << "blocking on wait" << std::endl;
cv.wait(lock);
std::cout << "executed wait" << std::endl;
std::cout << "consume " << vec.size() << "\\n";
void produce()
std::unique_lock<std::mutex> lock(mutex);
vec.push_back(1);
cv.notify_all();
std::cout << "produce" << std::endl;
int main()
std::thread consumers, producers;
consumers = std::thread(consu
以上是关于[C++11 多线程同步] --- 条件变量的那些坑条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)的主要内容,如果未能解决你的问题,请参考以下文章
[C++11 多线程同步] --- 条件变量的那些坑条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)