synchronization primitives(同步原语):在计算机中表示一个不可拆分的操作或一组不可拆分的操作,他必须被当作一个整体对待,要么成功,要么失败,不能执行到一半被打断,这样他就不正确了。
critical section(临界区):是每个线程中访问临界资源的那段代码,不论是硬件临界资源,还是软件临界资源,多个线程必须互斥地对它进行访问;
第2章 线程管理
2.1线程管理基础
// 1. 启动一个线程
std::thread my_thread([]{
do_something();
do_something_else();
});
2.2向线程函数传递参数
1. void f(int i,std::string const& s);
2. void not_oops(int some_param)
3. {
4. char buffer[1024];
5. sprintf(buffer,"%i",some_param);
6. std::thread t(f,3,std::string(buffer)); // 使用std::string,避免悬垂指针
7. t.detach();
8. }
2.3转移线程所有权
2.4 运行时决定线程数量
4.2 使用期望等待一次性事件
C++标准库模型将一次性事件成为期望
4.2.1 带返回值的后台任务
4.2.2 任务与期望
std::packaged_task<>
对一个函数或可调用对象,绑定一个期望;
std::packaged_task<>
的模板参数是一个函数签名,比如void()
就是一个没有参数也没有返回值的函数;
4.2.3 使用std::promises
4.2.4 为“期望”存储“异常”
4.2.5 多个线程的等待
# 条件变量
https://zhuanlan.zhihu.com/p/75220465