【发布时间】:2011-08-22 23:02:00
【问题描述】:
http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html 的页面说双重检查锁定在 java 中是有缺陷的。我只是想知道它是否也适用于其他语言(C#、Vb、C++ 等)
我读过Double checked locking pattern: Broken or not?、Is this broken double checked locking?、How to solve the "Double-Checked Locking is Broken" Declaration in Java? 说实话,我不知道共同的共识是什么。有人说是,它坏了,其他人说不是。
无论如何,我的问题是它是否也适用于其他语言(C#、Vb、C++ 等)
【问题讨论】:
-
根据我读过的专家意见,只要使用
volatile,它在 C# 中应该是安全的。同样,我相信较新版本的 java 之一使其安全。我对此不是很自信,也没有必要的其他语言专业知识,所以我不愿意发布答案。 -
考虑到你有 java >= 1.5 并应用正确的模式并且 Joshua Bloch 对你有足够的权限,双重检查没有被破坏:)
-
是的,在 Java >= 1.5 中,使用
volatile,它可以工作。但这并不一定意味着你应该使用它:ibm.com/developerworks/library/j-jtp03304 -
一般来说,这取决于您的锁定和可见性语义,即取决于您的语言实现的内存模型(或您的多线程/锁定库)。
-
@T.J.克劳德 - 在真正需要之前,你绝对应该避免它,我同意这一点。但它本身并没有损坏..
标签: c# java vb.net multithreading synchronization