更多C++学习笔记,关注 wx公众号:cpp读书笔记
Item 40: Use std::atomic
for concurrency, volatile
for special memory
可怜的volatile
。如此令人迷惑。本不应该出现在本章节,因为它跟并发编程没有关系。但是在其他编程语言中(比如,Java和C#),volatile
是有并发含义的,即使在C++中,有些编译器在实现时也将并发的某种含义加入到了volatile
关键字中(但仅仅是在用那些编译器时)。因此在此值得讨论下关于volatile
关键字的含义以消除异议。
开发者有时会与volatile
混淆的特性——本来应该属于本章的那个特性——是std::atomic
模板。这种模板的实例化(比如,std::atomic<int>
,std::atomic<bool>
,std::atomic<Widget*>
等)提供了一种在其他线程看来操作是原子性的的保证(译注:即某些操作是像原子一样的不可分割。)。一旦std::atomic
对象被构建,在其上的操作表现得像操作是在互斥锁保护的关键区内,但是通常这些操作是使用特定的机器指令实现,这比锁的实现更高效。
分析如下使用std::atmoic
的代码: