《多线程编程中的原子操作》出自《程序员》杂志2012年第3期,作者陈冠诚
关于原子操作的运用,各个平台或者语言已经提供了非常完整的库,在平时编码时,知道和能用好这些库所提供的API就可以,如,windows API中的atomic库,linux内核中的atomic.h,Java concurrent库中的atomic Integer,C++ 1x中最新支持的atomic_int等。
但明白和理解系统实现原子操作的机制和考虑会让我们做到不但知其然,而且知其所以然,加深对代码的理解。下面是文章中提到的几个考虑因素。
1)对变量的读写是否属于原子操作?
例如:
x=y;
x++;
++x;
x=1;
2)x86 CPU的相关机制,有:
诸如单字节的内存读写
总线锁定时(的内存操作)
缓存一致性原则保证缓存数据的正确
3)变量的字节对齐原则上影响对变量的读写是否为原子操作,但当前的硬件系统和编译器多对此做了优化。所以,有时候,即便没有字节对齐,系统对变量也可以原子读写,但我们应该明白那是系统默默为我们做了优化,平常编码中还是应该尽量做到字节对齐。
4)多线程对位的读写是否安全?