根据cpp首选项,volatile
关键字的大多数用法将在C++20中弃用。volatile
的缺点是什么?不使用volatile
时的替代解决方案是什么?
C++委员会语言进化主席就原因进行了很好的演讲。
简要总结一下,volatile
被移除的地方在标准中没有任何明确定义的含义,只是引起了混乱。
激励(模棱两可(的例子
- 易失性位字段应由硬件手册和/或编译器指定。
+=
是单/原子指令吗?++
怎么样?compare_exchange
需要多少次读/写? 如果失败了怎么办?void foo(int volatile n)
是什么意思? 还是int volatile foo()
?*vp;
应该做负载吗?(这在标准中已更改两次。
线程
从历史上看,人们使用volatile
来实现 C 和 C++ 中的线程安全。 在 C++11 中,添加了在线程之间创建同步和共享状态的非 UB 方法。 我推荐"返璞归真:并发"作为很好的介绍。