单例模式

单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点以访问该实例。单例模式通常涉及到延迟实例化(懒汉模式)或者在首次访问时创建实例,并确保在整个应用程序中只有一个实例存在。

要点:

  1. 私有构造函数: 单例类通常将其构造函数设置为私有,以防止外部直接实例化。
  2. 私有静态实例: 单例类通常包含一个私有的静态成员变量,用于保存实例。
  3. 公有静态方法: 提供一个公有的静态方法,用于获取该类的唯一实例。在这个方法中,通常会检查是否已经创建了实例,如果没有则进行实例化。

应用场景

  1. 全局配置:例如,日志配置、数据库连接池等。
  2. 全局访问点:例如,计数器、计时器等。
  3. 资源管理:例如,文件锁、打印机等。

示例代码

```c++

include

include

class ThreadSafeSingleton { public: // 获取实例的静态方法 static ThreadSafeSingleton& getInstance() { // 使用双检锁机制确保线程安全 if (!instance) { std::lock_guard lock(instanceMutex); // 使用锁保护实例的创建 if (!instance) { instance = new ThreadSafeSingleton(); } } return *instance; }

// 示例方法
void showMessage() {
    std::cout << "Hello, I am a Thread-Safe Singleton!" << std::endl;
}

private: // 将构造函数设为私有,防止外部实例化 ThreadSafeSingleton() {}

// 禁用拷贝构造和赋值运算符,确保只有一个实例
ThreadSafeSingleton(const ThreadSafeSingleton&) = delete;
ThreadSafeSingleton& operator=(const ThreadSafeSingleton&) = delete;

// 静态实例
static ThreadSafeSingleton* instance;
// 互斥锁
static std::mutex instanceMutex;

};

// 初始化静态成员变量 ThreadSafeSingleton* ThreadSafeSingleton::instance = nullptr; std::mutex ThreadSafeSingleton::instanceMutex;

int main() { // 多线程环境下获取单例实例并调用示例方法

pragma omp parallel num_threads(4)

{
    ThreadSafeSingleton& singletonInstance = ThreadSafeSingleton::getInstance();
    singletonInstance.showMessage();
}

return 0;

}