您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
在 Linux C++ 多线程编程中,线程安全的单例模式可以通过以下方法实现:
mutex
和 lock_guard
实现线程安全:#include <iostream>
#include <mutex>
class Singleton {
public:
static Singleton& getInstance() {
std::call_once(initFlag, &Singleton::initSingleton);
return *instance;
}
private:
Singleton() {}
~Singleton() {}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
static void initSingleton() {
instance = new Singleton();
}
static std::once_flag initFlag;
static Singleton* instance;
};
std::once_flag Singleton::initFlag;
Singleton* Singleton::instance = nullptr;
int main() {
Singleton& singleton = Singleton::getInstance();
return 0;
}
shared_mutex
和 shared_lock
实现线程安全的懒汉式单例模式:#include <iostream>
#include <memory>
#include <mutex>
class Singleton {
public:
static Singleton& getInstance() {
std::shared_lock<std::shared_mutex> lock(mutex_);
if (!instance_) {
std::unique_lock<std::shared_mutex> uniqueLock(mutex_);
if (!instance_) {
instance_ = std::make_shared<Singleton>();
}
}
return *instance_;
}
private:
Singleton() {}
~Singleton() {}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
static std::shared_mutex mutex_;
static std::shared_ptr<Singleton> instance_;
};
std::shared_mutex Singleton::mutex_;
std::shared_ptr<Singleton> Singleton::instance_ = nullptr;
int main() {
Singleton& singleton = Singleton::getInstance();
return 0;
}
这两种方法都可以实现线程安全的单例模式。第一种方法(使用 call_once
)适用于立即初始化的单例,而第二种方法(使用 shared_mutex
和 shared_lock
)适用于懒汉式单例,即在第一次使用时才初始化。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。