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
- C++ Concurrency in Action