Pac*_*ier 15 c# java vb.net multithreading synchronization
http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html上的页面说,双重检查锁定在java中是有缺陷的.我只是想知道它是否也适用于其他语言(C#,Vb,C++等)
我读过双重检查锁定模式:是否破碎?,这是双重检查锁定?,如何解决Java中的"双重检查锁定"声明?说实话,我不知道共同的共识是什么.有人说是的,其他人说不.
无论如何,我的问题是它是否也适用于其他语言(C#,Vb,C++等)
双重检查锁定在Java中是安全的,提供:
volatile
AND我的来源是JSR-133(Java内存模型)常见问题解答 - Jeremy Manson和Brian Goetz,2004年2月.Goetz在其他许多地方都证实了这一点.
然而,正如格茨所说,这是一个时间已经过去的成语.Java中的无对称同步现在很快,因此他建议您只需将getInstance()
方法声明为synchronized
需要进行延迟初始化.(我想这也适用于其他语言......)
此外,在所有条件相同的情况下,编写在Java 5中工作但在旧JVM中不可靠的代码是一个坏主意.
好的,那么其他语言怎么样?嗯,这取决于如何成语实施,并经常在平台上.
C# - 根据/sf/answers/137538271/,它是平台相关的,实例变量是否需要是volatile.然而,维基百科说,如果你使用volatile
或明确的记忆障碍,成语可以安全地实施.
VB - 根据维基百科,可以使用显式内存屏障安全地实现习语.
C++ - 根据维基百科,可以使用volatile
Visual C++ 2005 安全地实现这个习惯用法.但是其他消息来源说,一般而言,C++语言规范并不能提供足够的保证volatile
.但是,可以在C++ 2011语言修订版本的上下文中实现双重检查锁定- /sf/answers/426987991/.
(注意:我只是总结了一些我认为最近才发现的来源......声音.我不是C++,C#或VB专家.请阅读链接页面并做出自己的判断.)
归档时间: |
|
查看次数: |
1031 次 |
最近记录: |