• 两种单例模式(懒汉式,饿汉式)


    懒汉式:

    懒汉式是指,在第一次获取这个类的实例的时候才new这个对象。即可以延迟加载该对象实例。

    懒汉式单例设计模式在多线程同时初始化实例的时候有线程安全问题, 解决的方案是,加同步锁,使用同步方法和同步代码块都能解决问题。 然而多线程每次都访问锁,导致效率低下,所以使用同步代码块,然后以双重判断的形式来解决每次都判断同步锁导致的效率低下问题。

     1 class singleton
     2 {
     3 protected:
     4     singleton()
     5     {
     6         pthread_mutex_init(&mutex);
     7     }
     8 private:
     9     static singleton* p;
    10 public:
    11     static pthread_mutex_t mutex;
    12     static singleton* initance();
    13 };
    14 
    15 pthread_mutex_t singleton::mutex;
    16 singleton* singleton::p = NULL;
    17 singleton* singleton::initance()
    18 {
    19     if (p == NULL)
    20     {
    21         pthread_mutex_lock(&mutex);
    22         if (p == NULL)
    23             p = new singleton();
    24         pthread_mutex_unlock(&mutex);
    25     }
    26     return p;
    27 }

    饿汉式:

    饿汉式是指,在类加载的时候即new出该类对象。

    饿汉式单例模式在类加载时就创建了单例对象,它是线程安全的。

     1 class singleton
     2 {
     3 protected:
     4     singleton()
     5     {}
     6 private:
     7     static singleton* p;
     8 public:
     9     static singleton* initance();
    10 };
    11 singleton* singleton::p = new singleton;
    12 singleton* singleton::initance()
    13 {
    14     return p;
    15 }
  • 相关阅读:
    apche启动错误|httpd.pid overwritten — Unclean shutdown of previous Apache run?
    查看Mysql版本号 (最简单的是status )
    在不损坏C盘的情况下为C盘扩容,适用于Win
    Python环境配置安装
    用Python建立最简单的web服务器
    MongoDB
    MongoDB
    MongoDB
    MongoDB
    MongoDB
  • 原文地址:https://www.cnblogs.com/Kiven5197/p/8867584.html
Copyright © 2020-2023  润新知