97得票8回答
为什么在双重检查锁定中使用volatile?

以下是使用双重检查锁定实现的单例模式,来自于《Head First》设计模式书籍:public class Singleton { private volatile static Singleton instance; private Singleton() {} pu...

62得票8回答
.NET中的双重检查锁定

我看到了这篇文章,讨论了为什么Java中双重检查锁定模式是有问题的。如果变量被声明为volatile,那么该模式在.NET(尤其是C#)中是否有效?

53得票5回答
为什么在同步块中要使用volatile?

我在Java中看到一些示例,在代码块上进行同步以更改某些变量,而该变量最初被声明为volatile。我在一个单例类的示例中看到了这个,他们将唯一实例声明为volatile,并且在初始化该实例的代码块上同步...我的问题是为什么我们要声明它为volatile,同时对它进行同步?难道其中一个不足以...

46得票5回答
在使用双重锁定时,将单例实例设为volatile有什么意义?

private volatile static Singleton uniqueInstance 在单例模式中,使用双重锁定方法进行同步时,为什么需要将单个实例声明为volatile?如果不声明为volatile是否可以实现相同的功能?

43得票11回答
Java双重检查锁定

最近我偶然看到一篇关于Java的双重检查锁定模式及其缺陷的文章,现在我想知道我多年来一直在使用的该模式的变体是否存在任何问题。 我查看了很多关于该主题的帖子和文章,并理解了获取部分构造对象的引用可能存在的潜在问题,就我所知,我认为我的实现不会出现这些问题。以下模式是否存在任何问题? 如果没...

30得票5回答
不使用volatile实现的双重检查锁定

我看到了关于如何进行双重检查锁定的这个问题: // Double-check idiom for lazy initialization of instance fields private volatile FieldType field; FieldType getField() { ...

21得票1回答
线程安全的延迟初始化:静态变量 vs std::call_once vs 双重检查锁定

对于线程安全的延迟初始化,应该优先选择在函数内部使用静态变量、std::call_once,还是显式双重检查锁定?它们之间是否有任何实质性的区别? 这个问题中包含了这三种方法。 在C++11中的双重检查锁定单例模式 C++11中出现了两个版本的双重检查锁定,可以在Google上找到。 ...

20得票2回答
Android中的双重检查锁定

许多人认为,除非你正在运行1.5或更高版本并使用volatile关键字,否则Java中常用的双重检查锁定惯用语是无效的。 一个有问题的双重检查锁定示例:// Broken multithreaded version // "Double-Checked Locking" idiom clas...

16得票5回答
在字典“ContainsKey”上进行双重检查锁定

我的团队目前正在就这个问题进行讨论。有关代码大致是这样的:if (!myDictionary.ContainsKey(key)) { lock (_SyncObject) { if (!myDictionary.ContainsKey(key)) ...

16得票3回答
以线程安全的方式延迟初始化Java Map

我需要对一个map及其内容进行惰性初始化。到目前为止,我有以下代码:class SomeClass { private Map<String, String> someMap = null; public String getValue(String key) {...