C++11 - atomic类型和内存模型
参考链接:C++11 - atomic类型和内存模型 - 知乎 (zhihu.com)
std::atomic - C++中文 - API参考文档 (apiref.com)
“就两个线程就共享了一个数据,需要承担互斥锁的管理负担?!” C++11标准从不同的视角看待这个问题:需要同步的总是资源/数据,而不是代码。因此C++11对数据进行了更为良好的抽象,引入"原子数据类型"/atomic类型,以达到对开发者掩盖互斥锁、临界区的目的。要知道,这些临界区、互斥锁才是平台相关的东西。
->>>>
代码中,将total定义为“原子数据类型”:atomic_llong, 该数据类型长度等于C++11中内置数据类型long long。可以看到,程序员不需要为原子数据类型显示地调用加锁、解锁的API,线程就能够对共享数据total进行互斥地访问。太容易了,又可以“偷懒”了!
上述代码,书1作者在Linux系统下开发,用g++编译器编译运行的。代码不做任何改动,我在Windows系统下使用Visual Studio 2015编译运行也OK的。(互斥锁无法在不同平台运行)