问题标签 [double-checked-locking]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
367 浏览

c++ - C++ 和双重检查锁定的风险:解决方法?

我正在阅读一篇关于“Scott Meyers 的双重检查锁定的风险”的论文。http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf

作者给出了双重检查锁失败的原因(第3页,第4节)。我在想办法在不使用 C++11 的情况下解决这个问题。并不是我不想使用 C++ 11,只是想看看是否可以在不使用 std::call_once 等函数的情况下解决它

Singleton::instance() 中的代码是否会在多线程环境中工作,因为为 SeqAssign 类调用构造函数和析构函数的顺序是确定性的。

0 投票
1 回答
145 浏览

java - Java双重检查锁定,此代码有效吗?

我已阅读“双重检查锁定已损坏”声明。但我想知道如果我通过函数创建对象,可以吗?

0 投票
1 回答
3068 浏览

java - 双重检查锁定从检查样式中消失了-为什么?

发行说明中,checkstyle 删除了双重检查锁定检查。

我很难理解为什么。他们不仅在发行说明中而且在问题跟踪器中都回答了这个问题:

删除了 DoubleCheckedLocking 检查,就像在 Java 5(及更高版本)中一样,使用 volatile 关键字解决了这个问题。

我假设,如果 checkstyle 正在删除此警告,那是因为它不再有用。也就是说,要么错误不再发生,要么另一个警告完成了这项工作。但

我不明白为什么 Java 5 中不会再发生这样的错误,或者它是如何被另一个警告补充的。有人可以解释一下吗?

编辑:我了解添加 volatile 关键字如何解决问题。我担心的是:这个警告难道不值得吗?我正在考虑程序员使用上述锁定模式但忘记声明变量 volatile 的情况。checkstyle 不应该仍然警告它吗?

0 投票
6 回答
3743 浏览

c# - C#中的双重检查锁定

这个想法是从

  • 一个变量
  • 如果不存在,则从文件中
  • 如果不存在,则从服务器

许多线程使用此代码。尽管它看起来是线程安全的,但实际上并非如此。因此,我对其进行了测试,这给了我这个想法并让我确信。_data写作前应仔细检查现有情况。例如,它应该像通常在模式 Singleton 中使用的双重检查。

有人请让我了解如何在这里实现它?

编辑:

编辑2

上面的代码可能与 .NET < 4.0 一起使用,因此不允许在那里使用 Lasy。我现在唯一的问题是,我应该使用 volatile 以防我使用双重检查锁定吗?

0 投票
1 回答
141 浏览

java - 寻找一个测试来重现损坏的双重检查锁定

有人知道在java中重现“损坏的双重检查锁定”问题的测试吗?

0 投票
1 回答
141 浏览

java - 免费的延迟初始化

一篇关于双重检查锁定习语的文章中,我发现了这句话:

一种在没有同步的情况下按预期工作的延迟初始化的特殊情况是静态单例。当初始化的对象是一个没有其他方法或字段的类的静态字段时,JVM有效地自动执行惰性初始化。

为什么强调的部分很重要?如果有其他方法或字段,为什么它不起作用?

(文章已经有10多年了。信息还相关吗?)

0 投票
5 回答
1967 浏览

java - Singleton 类中双重检查锁定模式的潜在问题

我相信我写的下面的 Singleton 类是Thread Safe.

在某些情况下,双重检查锁定模式显然可能会遇到问题(我已经看到人们警告过它,尽管这是不久前的事情,所以我现在只是在谷歌上搜索答案)

我现在不确定,我下面的 Singleton 类中的 Double Checked 锁定模式是否会有任何问题。我添加了双重检查锁定模式,以使程序运行得稍微快一些。

我的代码在上面的 Singleton 类中是否存在双重检查锁定模式的问题?

以及创建单例类线程安全的最佳方法是什么。那么持有人类成语呢?我可以在我的单身课程中使用它吗?

我上面的单例类的任何示例都将帮助我更好地理解如何编写更好的线程安全单例类。

谢谢您的帮助。

更新代码:-

经过一些建议,我对代码进行了更改-

让我知道这是否正确。

0 投票
2 回答
100 浏览

java - JIT如何调度字节码的执行?

说,我们有代码:

编译成字节码实际上是三个步骤:

在这里我想知道,如果construct(mem) 非常慢,JIT 会在步骤2 中等待直到mem 完全构建好?

如果它不等待(异步)

那么如何保证mem在使用前完全构建(单线程)?

如果它确实等待(同步)

那么为什么双重检查锁(参见下面的代码和本文)会失败?

我提到的文章指出,上面的代码将返回一个尚未完全构造的实例。

0 投票
2 回答
606 浏览

java - Java双重检查锁定解决方案?

这是Java 双重检查锁定的后续。

下面的代码片段有 2 个有趣的特征。

1) 在对象准备好使用之前,它需要调用一个单独的 init() 方法。所以 volatile 没有帮助(我知道,为什么不直接将 init() 中的代码放入构造函数中?这里是为了说明的目的)。

2)它使用 tmp 变量进行初始化,并在初始化完成后分配给实例。

那么,这是否会受到重新排序问题的影响,即可以在调用 tmpInstance.init() 之前将实例分配给 tmpInstance 吗?

谢谢,丰富

0 投票
1 回答
784 浏览

java - 使用双重检查锁实现读写锁

我写了一个Java ReadWriteLock,读者使用双重检查锁定来获取写锁。这是不安全的(就像带有惰性实例化的 DCL 的情况一样)?

我知道 Java 已经有了 ReentrantReadWriteLock。我对如何确定哪种形式的 DCL 安全或不安全的一般问题更感兴趣?