最早接触valotile是在程序员的自我修养看到的,当时似懂非懂。这篇文章也挂在blog快一年了,今天重新查找资料,才算看明白了个大概。特此记录,毕竟是应用开发者,到此为止了
定义和区别
volatile是作用在单线程下,针对特定内存使用的。
atomic是c++11提供的原子类操作
原子性 | 可见性 | 有序性 | 禁用优化 | |
---|---|---|---|---|
atomic | cas实现 | 缓存一致性实现 | 内存屏障实现 | 不支持 |
volatile | 不支持 | 不支持 | 不支持 | 支持 |
有序性
1 | x = y; |
禁用优化:
1 | //-------------- |
总结
- atomic和volatile是完全不同的东西。
- atomic可用在多线程中,对小数据进行原子操作,是安全的
- volatile用于特殊内存防止编译器级别的优化,atomic用于普通内存,优化没有副作用,如果是特殊内存就用volatile,如果并且是多线程,可以叠加atomic使用
- 可以搭配一起使用,atomic并不能取代volatile的作用,volatile也没有atomic的功能
reference
GCC 原子操作中 Acquire/Release/Consume/Relaxed 内存模型