C++ 并发语法

说来也上了一年班都在写C++了,感觉这一年里学到的C++真是比在学校学的那些C with Class要高级多了。主要就是多线程与Modern C++。先对多线程做个笔记记录一下吧。 C++多线程这块内容总的来说就是控制线程的先后执行顺序,使程序如我们所愿的运行。 [toc]

mutex

mutex

用一个锁来限制对临界区的访问。但是存在缺点。比如在某个函数内lock了 ,但是得要有地方来解锁。这个解锁就会非常复杂了。于是就有了guard_lock利用C++的RAII,在析构函数里unlock

std::mutex m;
int fun(int a, int b) {
    m.lock();
    int c = a + b;
    return c;
}

lock_guard

std::lock_guard<std::mutex> lk(m);
int fun(int a, int b) {
    lk.lock();
    int c = a + b;
    return c;
}

unique_lock

unique_lock是对guard_lock的再一次改进,支持lock/unlock多次操作。更灵活。

condition variabeles

通过使用notify/wait来实现线程之间的同步

future

  • std::async
  • packaged_task
  • promise

    concurrency TS

  • then
  • latch
  • barrier

    Ref

    1. C++ Concurrency in Action