文章目录
目录
前言
pthread_cp_1_21 · MFF的库/linux - 码云 - 开源中国 (gitee.com)
环形队列,线程池及线程的封装。
一、线程安全的单例模式是什么?
单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在多线程环境下,实现线程安全的单例模式有多种方式,以下是几种常见的实现方式:
饿汉式
- 特点:在类加载时就立即创建单例实例,不存在线程安全问题,因为类的加载是由 JVM 保证线程安全的。
- 思路:在程序启动时就创建单例对象,利用静态对象的初始化机制保证线程安全。
代码
#include <iostream>
class Singleton {
private:
// 构造函数设为私有,防止外部实例化
Singleton() {}
// 拷贝构造函数和赋值运算符设为删除,防止拷贝和赋值
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
// 静态成员变量,在程序启动时就初始化
static Singleton instance;
public:
// 公共静态方法,用于获取单例实例
static Singleton& getInstance() {
return instance;
}
};
// 静态成员变量的初始化
Singleton Singleton::instance;
int main() {
Singleton& s1 = Singleton::getInstance();
Singleton& s2 = Singleton::getInstance();
std::cout << (&s1 == &s2) << std::endl; // 输出1,表示是同一个实例
return 0;
}
Singleton
类的构造函数是私有的,避免外部创建对象。instance
是静态成员变量,在程序启动时就会初始化,且只会初始化一次,保证了单例的唯一性。getInstance
方法返回这个静态实例的引用。
懒汉式(双重检查锁定)
- 思路:在第一次使用时才创建对象,通过双重检查锁定和
std::mutex
来保证线程安全。