易访问性volatile变量

本文关键字:volatile 变量 访问 易访问 | 更新日期: 2023-09-27 18:04:20

当我用volatile关键字声明一些变量时,它现在是完全线程安全的,还是我应该在某些情况下通过Interlocked类或lock语句访问它?

易访问性volatile变量

volatile关键字只是插入一个完整的内存屏障—保证CPU管道上的所有读写指令都完成。对于最终用户来说,其他线程中的可见性是有保证的,因为当写操作完成时,结果会被推送到CPU的缓存(如果需要,也会推送到RAM)。在最新的英特尔cpu上运行应用程序时,您不应该关心这个问题-它们保证读写障碍,而无需额外的显式指令。

另一方面,Interlocked通过给定的内存地址锁定CPU总线,并允许您对变量执行原子操作,因此没有其他CPU核心可以同时对相同的内存地址执行其他读写操作。这些原子操作实际上是x86 CPU架构家族的指令,所以这就是为什么你有有限数量的操作:加、自增、自减、交换、比较交换。

volatileInterlocked都与CPU特性有关,但是常见的同步原语——临界区、自旋锁、互斥锁、信号量、自动/手动复位事件——都是在此基础上构建的。