gpt4 book ai didi

c++ - 为什么在我的单例类中未定义对互斥锁的引用

转载 作者:行者123 更新时间:2023-11-28 00:20:56 24 4
gpt4 key购买 nike

<分区>

我已经实现了 Meyer 的单例模式。我尝试在多线程环境中做一些测试。以下是我如何用 C++ 实现该类。

#include<thread>
#include<mutex>
class singleton {
public:
static singleton& instance() {
std::lock_guard<std::mutex> lck(mtx);
static singleton *my = new singleton;
return *my;
}
private:
static std::mutex mtx;
singleton() {}
~singleton() {}
singleton(const singleton &) {}
singleton& operator=(const singleton &) {}
};

但是当我用 g++ -std=c++11 singleton.cpp -o singleton -lpthread 编译它时,它说

/tmp/ccfEBnmN.o: In function `singleton::instance()':
singleton.cpp(.text._ZN11singleton12instanceEv[_ZN11singelton12instanceEv]+0x10):
undefined reference to `singleton::mtx' collect2: error: ld returned 1 exit status

我知道这可能是设计中的一些问题,因为如果不初始化第一个单例实例,我们怎么能得到 mtx.如果在这种情况下,我的问题是如何根据我的代码实现一个线程安全的单例类?我们如何在单例类中初始化 mtx?

我知道有一种传统方法可以通过维护指向单例类的静态指针来创建单例模式。但确实那不是“那么”线程安全的。甚至在 instance() 方法中应用双重检查机制。

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