【并发编程十三】c++原子操作(1)
一、改动序列
1、改动序列
- 在一个c++程序中,每个对象都有一个改动序列(可以参考原子操作的内存理解std::memory_order)。它由所有线程在对象上的全部写操作构成,其中第一个写操作即为对象的初始化。大部分情况下,这个序列会随程序的多次运行而发生变化,但是在程序的任意一次运行过程中,所含的全部线程都必须形成相同的改动序列。
- 若多个线程共同操作某一对象,但它却不属于原子类型,我们就要自己负责充分实行同步操作,进而确保对于同一个变量,所有线程就其达成一致的改动序列。变量的值会随时间推移形成一个序列。
- 在不同的线程上观察属于同一个变量的序列,如果所见各异,就说明出现了数据竞争和未定义行为。
- 若我们采用了原子操作,那么编译器由责任保证必要的同步操作有效、到位。
2、预测执行
预测执行又称推测执行、投机执行,是一类底层优化技术,包括分支预测、数值预测、预读内存和预读文件等,目的是在多级流水cpu上提高指令的并发度。做