[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)

[C++11 多线程同步] --- 条件变量

[C++11 多线程同步] --- 条件变量

[C++11 多线程同步] --- 条件变量

[多线程]C++11多线程-条件变量(std::condition_variable)

并发编程多线程程序同步策略