Leaky Meyers Singleton:它是线程安全的吗?
Leaky Meyers Singleton: is it threadsafe?
我实现了一个 Meyers Singleton,然后意识到它可能容易受到析构函数失败问题的影响。
因此,我将代码更改为:
Instance *getInstance()
{
static Instance* singleton = new Instance();
return singleton;
}
在实现这个之后,没有出现明显的错误,一位同事正在实现一个不同的单例并使用 std::call_once
代替。
我现在意识到,经过大量搜索后,我找不到“Leaky Meyers Singleton”是否是线程安全模式。 leaky singleton是否应该改为std::call_once
?或者它是线程安全的吗?
指针是否被视为“块作用域”变量?如果是这样,我认为这将是线程安全的,但如果不是,则当前泄漏的单例方法会引入重大错误。
是的,这是线程安全的:没有两个线程会同时尝试用静态存储持续时间初始化同一个变量。这包括评估初始值设定项的全部内容。
我实现了一个 Meyers Singleton,然后意识到它可能容易受到析构函数失败问题的影响。
因此,我将代码更改为:
Instance *getInstance()
{
static Instance* singleton = new Instance();
return singleton;
}
在实现这个之后,没有出现明显的错误,一位同事正在实现一个不同的单例并使用 std::call_once
代替。
我现在意识到,经过大量搜索后,我找不到“Leaky Meyers Singleton”是否是线程安全模式。 leaky singleton是否应该改为std::call_once
?或者它是线程安全的吗?
指针是否被视为“块作用域”变量?如果是这样,我认为这将是线程安全的,但如果不是,则当前泄漏的单例方法会引入重大错误。
是的,这是线程安全的:没有两个线程会同时尝试用静态存储持续时间初始化同一个变量。这包括评估初始值设定项的全部内容。