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

Posted Overboom

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C++11 多线程同步] --- 条件变量相关的知识,希望对你有一定的参考价值。

1 std::condition_variable 类介绍

当 std::condition_variable 对象的某个 wait 函数被调用的时候,它使用 std::unique_lock(通过 std::mutex) 来锁住当前线程。当前线程会一直被阻塞,直到另外一个线程在相同的 std::condition_variable 对象上调用了 notification 函数来唤醒当前线程。

std::condition_variable 对象通常使用 std::unique_lock< std::mutex> 来等待,如果需要使用另外的 lockable 类型,可以使用 std::condition_variable_any 类。

std::condition_variable和 std::condition_variable_any 类对比:
相同点:两者都能与std::mutex一起使用。
不同点:前者仅限于与 std::mutex 一起工作,而后者可以和任何满足最低标准的互斥量一起工作,从而加上了_any的后缀。condition_variable_any会产生额外的开销。
一般只推荐使用condition_variable。除非对灵活性有硬性要求,才会考虑condition_variable_any。

2 condition_variable member function介绍

2.1 构造函数

default (1) condition_variable()
copy [

以上是关于[C++11 多线程同步] --- 条件变量的主要内容,如果未能解决你的问题,请参考以下文章

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

[C++11 多线程同步] --- 条件变量的那些坑条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)

[C++11 多线程同步] --- 条件变量的那些坑条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)

[C++11 多线程同步] --- 条件变量的那些坑条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)

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

Linux多线程编程与同步实例(基于条件变量)