1. 05-条件变量——std::condition_variable

    条件变量是另外一种用来同步的方法。而所谓条件变量,就是说在某一条件达成的时候线程可以继续往下执行,否则将一直等待下去。C++提供了2种条件变量,这里只说condition_variable(因为condition_variable_any 我也不知道咋用的~)。虽然条件变量可以用来进行同步,但是其同步功能还是需要mutex来完成,它自己只提供条件唤醒、等待等操作。

    2020/07/03 cpp_concurrency

  2. 03-多线程共享数据竞争——初始化和读写锁

    如果某一数据需要初始化之后再进行多线程共享,或者某一资源大多数时候都是只读操作,那么此时如果使用互斥锁将会造成比较大的性能浪费。在传统的系统编程中可以使用读写锁来完成,但是C++11标准并没有将读写锁纳入标准库。虽然没有提供读写锁,但是我们可以很容易的实现一个自己的读写锁,同时C++11标准库也提供了数据初始化操作——std::once_flag和std::once_call——它们保证相关的操作只在一个线程上完成。

    2020/07/03 cpp_concurrency

  3. 04-boost::shared_mutex 的实现

    boost库的共享mutex实际上很简单,它是由条件变量、普通的mutex构成的。shared_mutex维护了2个条件变量来判断是否可读、可写。按照以下原则进行加锁和解锁:

    2020/07/03 cpp_concurrency

  4. 02-多线程基础——std::mutex

    资源竞争是并发编程不可回避的问题。对于资源竞争,要么设计无锁模式,要么老老实实的加锁排队等待。在Windows和Linux下有很多相关的系统API或对象进行线程同步,比如:

    2020/07/03 cpp_concurrency

  5. 01-多线程基础——thread类

    参考:三种创建线程的方式 参考:join和detach线程 参考:传递参数给线程 参考:cpp11并发编程入门——futures

    2020/07/03 cpp_concurrency