概述
上一节通过Volatile关键字解决了并发编程的可见性问题,本节介绍并发编程的另一个问题:原子性。原子操作是指整个操作过程不可被拆分或者不会被打断,因此不需要考虑并发竞争问题,c11中增加了_Atomic关键字,用来定义原子类型变量,支持并发访问 (头文件 <stdatomic.h>)
1 原子操作:_Atomic
我们的程序逻辑经常遇到这样的操作序列:1、读一个位于memory中的变量的值到寄存器中 2、修改该变量的值(也就是修改寄存器中的值) 3、将寄存器中的数值写回memory中的变量值。如果这个操作序列是串行化的操作(在一个thread中串行执行),那么一切ok。然而,世界总是不能随你所愿,比如运行在多处理器或者单处理器多任务(多核中断也属于多任务)场景对共享资源操作,这时就会出现竞争问题。_Atomic可以帮助我们解决上述问题。
_Atomic好用的话,各类普通教材为什么都没有专门讲原子操作呢?
1.1_Atomic关键字特点
- 可以帮我们生成原子化的读-改-写操作,从而避免多任务或多处理器对共享资源的竞争问题。
- 并且相对于操作系统api解决竞争方式,_Atomic有着更高的性能,它并没有调用任何操作系