dsi*_*cha 1 language-agnostic multithreading locking atomic
来自维基百科的经典破坏双重检查锁定的略微修改版本:
class Foo {
private Helper helper = null;
public Helper getHelper() {
if (helper == null) {
synchronized(this) {
if (helper == null) {
// Create new Helper instance and store reference on
// stack so other threads can't see it.
Helper myHelper = new Helper();
// Atomically publish this instance.
atomicSet(helper, myHelper);
}
}
}
return helper;
}
}
Run Code Online (Sandbox Code Playgroud)
假设基础原子操作库正常工作,只是简单地发布新创建的Helper实例原子使这个双重检查的锁定习惯安全吗?我意识到在Java中,人们可以使用volatile,但即使示例是伪Java,这应该是一个与语言无关的问题.
也可以看看:
Jon*_*eet 14
它完全取决于您的平台/语言的确切内存模型.
我的经验法则:就是不要这样做.无锁(或减少锁定,在这种情况下)编程很难,除非你是一个线程忍者,否则不应该尝试.你应该只有在你有真正需要它的分析证明时才考虑它,在这种情况下,你会获得关于该特定平台的线程绝对最好和最新的书,看看它是否可以帮助你.
| 归档时间: |
|
| 查看次数: |
474 次 |
| 最近记录: |