我想知道lock
vs的运行时是否有任何区别syncronized
。我了解到这syncronized
是一个缓慢的操作并且在 Java 中已经过时。今天我lock
在 C# 看到了,我想知道它们是否相同,并且lock
是我“想要”避免的东西,就像在 Java 中一样,或者他更快,我想使用它......
谢谢!
1 synchronized 并没有过时,java.util.concurrent.locks 包只是提供了并不总是需要的扩展功能。
2 锁定是在 CPU 级别完成的,在这方面 Java 和 C# 没有区别
见http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html
... 需要特殊指令(称为内存屏障)来刷新或使本地处理器缓存无效,以便查看其他处理器进行的写入或使该处理器的写入对其他人可见。这些内存屏障通常在执行锁定和解锁操作时执行;它们对高级语言的程序员是不可见的。