volatile作为同步机制

Sil*_*ent 5 c# multithreading synchronization

假设我有一个类Foo,它有一个名为Count的静态成员变量(类型为整数).此变量用于多线程应用程序,我在对此变量进行任何读/写操作之前使用锁同步机制.正如我正在阅读本文的易失性我得到的印象是我可以删除围绕此变量的所有锁定,并在声明此变量时使用volatile关键字.这应该照顾所有与synchnronization相关的东西.它是否正确?这种方法的优缺点是什么?

Eri*_*ert 8

我可以删除这个变量周围的所有锁,只需在声明此变量时使用volatile关键字.这应该照顾所有与synchnronization相关的东西.它是否正确?

也许.也许不吧.获取多线程代码非常困难.获得低锁多线程代码最好留给专家.

这种方法的优缺点是什么?

优点是它可以快几毫秒来避免锁定.缺点是,如果你的低锁编程错误,那么你的程序看起来很好,然后有奇怪的故障模式,无法调试或重现.

当您的性能分析使您得出低锁定解决方案是实现客户要求您达到的性能目标的唯一途径时,您应该只使用低锁定解决方案.你只能用低锁解去,当你有一个彻底深刻的,每一个可能的CPU你的程序将永远运行在可以在低锁码执行每优化的理解.您需要深入了解CLR保证的内存模型,硬件保证的内容以及所有差异.

我自己并不掌握这种理解.这就是为什么除了最琐碎的低锁代码之外我什么也写不出来的东西,而且我还有行业领先专家认真阅读过的低锁代码.