gpt4 book ai didi

c++ - 通过惰性求值使 Meyers 的 Singleton 线程安全快速

转载 作者:太空宇宙 更新时间:2023-11-04 12:10:42 25 4
gpt4 key购买 nike

所以我读了很多关于为什么这个实现不是线程安全的。但是我没有找到如何使其线程安全快速的答案?使其线程安全的变体是添加互斥体(或者在某些情况下,只需关键部分就足够了),但这会使该方法慢得多。那么是否有一种变体可以使此代码线程安全且快速,或者至少现在与在那里添加互斥量一样慢?

static Singleton& getInstance()
{
static Singleton singleton;
return singleton;
}

PS:是的,当我们使用 Singleton 指针作为类的成员时,我也阅读了很多关于线程安全 Singletom 实现的内容,问题是关于 Singleton 的这个特定实现,没有指针和 new 并使用惰性评估。

最佳答案

对于某些编译器,您所拥有的可能已经具有线程安全保证。如果您不关心代码的可移植性并且它适合您,那么请乐​​于接受。

如果你有可用的 boost 线程,你可以使用 boost::call_once 来初始化。这是线程安全的,仅在首次初始化时产生成本。

当然,您也可以通过初始化“Meyers”单例创建完全线程安全,即在创建访问它的线程之前第一次访问它。如果您已经实现了许多此类单例,请考虑这样做。

所有这些,甚至 boost::call_once 都只适用于对象的创建。但是,如果由多个线程访问,它的访问可能需要单独的同步技术。

(顺便提一下,Meyers Effective C++ 的第 47 项中提到了这个单例,这表明该标准的后续修订版使其成为线程安全的,并且后来的编译器符合它,但是它确实警告您并非所有编译器都兼容)。

关于c++ - 通过惰性求值使 Meyers 的 Singleton 线程安全快速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9994476/

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