gpt4 book ai didi

multithreading - 这是双重检查锁定的安全版本吗?

转载 作者:行者123 更新时间:2023-12-03 13:14:20 26 4
gpt4 key购买 nike

这是我刚刚想出的一个想法,它是一种安全、有效的方法来处理单例同步问题。它基本上是双重检查锁定,但有一个涉及线程本地存储的扭曲。在 Java/C#/D 风格的伪代码中,假设 __thread表示静态变量的线程本地存储:

class MySingleton {
__thread static bool isInitialized;
static MySingleton instance;

static MySingleton getInstance() {
if(!isInitialized) {
synchronized {
isInitialized = true;
if(instance is null) {
instance = new MySingleton();
}
}
}

return instance;
}
}

这保证只输入 synchronized在程序的整个生命周期中每个线程阻塞一次。从那时起,我们对线程局部 bool 值进行简单检查,以查看我们是否已经进入同步块(synchronized block)并验证对象是从该线程初始化的。

最佳答案

我认为与语言无关(或与平台无关)的方法在这里没有帮助,因为虽然该结构在逻辑上可能是合理的,但存在特定于实现的陷阱会阻止它正常工作。一个例子是双重检查锁定,它在 Java pre-5 上不起作用,因为它在 JVM 级别被破坏了。

因此,您应该在每个平台上使用可用的语言结构或库。

对于 Java,您可以使用 enum 获得单例.

关于multithreading - 这是双重检查锁定的安全版本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2053731/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com