当前位置: 首页 > news >正文

建大型网站北京工商注册app

建大型网站,北京工商注册app,做外贸有哪些好的网站有哪些,自己做的网站加载很难文章目录 1.单例模式的特点😊2.单例模式两种实现🤣🤗😊2.1 饿汉式2.2 懒汉式 3.传统单例模式的线程安全问题4.解决方法4.1静态局部变量4.2加锁4.3双重检查锁(DCL)4.4pthread_once 1.单例模式的特点&#x1…

文章目录

  • 1.单例模式的特点😊
  • 2.单例模式两种实现🤣🤗😊
    • 2.1 饿汉式
    • 2.2 懒汉式
  • 3.传统单例模式的线程安全问题
  • 4.解决方法
    • 4.1静态局部变量
    • 4.2加锁
    • 4.3双重检查锁(DCL)
    • 4.4pthread_once

1.单例模式的特点😊

1.全局只有一个类的static实例存在;
2.不允许直接实例化,构造函数为私有的,只通过一个类的静态方法获取该实例;

2.单例模式两种实现🤣🤗😊

2.1 饿汉式

  饿汉式是在类加载的时候就会创造实例,会造成资源的浪费。 具体:内部先定义并初始化好了一个静态实例。获取方法中直接返回实例。
特点:线程安全,会造成资源浪费

实现:

class Singleton {
private:static Singleton instance;// 私有构造函数,防止类外实例化对象Singleton() {}public:// 获取实例的静态方法static Singleton& getInstance() {return instance;}// 其他成员函数void doSomething() {// do something}
};// 静态成员变量需要在类外初始化
Singleton Singleton::instance;int main() {// 获取单例对象实例Singleton& singleton = Singleton::getInstance();// 调用单例对象的方法singleton.doSomething();return 0;
}

2.2 懒汉式

懒汉式是在需要时才创建实例,通过获取实例方法获取实例。
具体:内部定义一个静态实例,获取方法中判断实例是否为空,空则初始化实例;否则返回该实例
特点:避免资源浪费,造成线程安全问题。
实现

class Singleton {
private:// 静态成员变量,用于保存单例实例static Singleton* instance;// 构造函数私有化,防止外部创建实例Singleton() {}public:// 静态成员函数,用于获取单例实例static Singleton* getInstance() {// 判断实例是否为空,如果为空则创建实例if (instance == nullptr) {instance = new Singleton();}return instance;}// 删除拷贝构造函数和拷贝赋值运算符,防止被复制Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;
};Singleton* Singleton::instance = nullptr;  // 初始化静态成员变量int main() {// 获取单例实例Singleton* singleton1 = Singleton::getInstance();Singleton* singleton2 = Singleton::getInstance();// 判断两个实例是否相同if (singleton1 == singleton2) {cout << "两个实例相同" << endl;} else {cout << "两个实例不相同" << endl;}return 0;
}

3.传统单例模式的线程安全问题

饿汉式是线程安全的,懒汉式不是
当多线程执行getInstance时候,如果线程A判断当前实例为空,线程B正好判断到也为空,就会申请资源;当线程A恢复了后,继续执行,也会申请内存空间;就会出现两个实例,这就会出现问题;

4.解决方法

4.1静态局部变量

class Singleton {
private:Singleton() {}public:static Singleton* getInstance() {static Singleton instance;return &instance;}
};

4.2加锁

class Singleton {
private:// 静态成员变量,用于保存单例实例static Singleton* instance;// 构造函数私有化,防止外部创建实例Singleton() {}public:// 静态成员函数,用于获取单例实例static Singleton* getInstance() {// 判断实例是否为空,如果为空则创建实例Mutexlock lock(mutex);//加锁if (instance == nullptr) {instance = new Singleton();}return instance;}// 删除拷贝构造函数和拷贝赋值运算符,防止被复制Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;
};Singleton* Singleton::instance = nullptr;  // 初始化静态成员变量int main() {// 获取单例实例Singleton* singleton1 = Singleton::getInstance();Singleton* singleton2 = Singleton::getInstance();// 判断两个实例是否相同if (singleton1 == singleton2) {cout << "两个实例相同" << endl;} else {cout << "两个实例不相同" << endl;}return 0;
}

4.3双重检查锁(DCL)

class Singleton {
private:// 静态成员变量,用于保存单例实例static Singleton* instance;// 构造函数私有化,防止外部创建实例Singleton() {}public:// 静态成员函数,用于获取单例实例static Singleton* getInstance() {// 判断实例是否为空,如果为空则创建实例if (instance == nullptr) {Mutexlock lock(mutex);if(instance==nullptr)instance = new Singleton();}return instance;}// 删除拷贝构造函数和拷贝赋值运算符,防止被复制Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;
};Singleton* Singleton::instance = nullptr;  // 初始化静态成员变量int main() {// 获取单例实例Singleton* singleton1 = Singleton::getInstance();Singleton* singleton2 = Singleton::getInstance();// 判断两个实例是否相同if (singleton1 == singleton2) {cout << "两个实例相同" << endl;} else {cout << "两个实例不相同" << endl;}return 0;
}

4.4pthread_once

#include<iostream>
class singleton{
public:
static singleton& getinstance()
{
pthread_once(&ponce,init);//保证该函数只被执行一次
return instance;
}
private:
static void init()
{
instance=new singleton();
}
singleton(){}
~singleton(){}
static pthread_once_t  ponce;
static singleton* instance;
};
singleton::ponce=PTHREAD_ONCE_INIT;
singleton::instance=nullptr;
http://www.yayakq.cn/news/69416/

相关文章:

  • 浙江省建设厅举报网站发布平台有哪些
  • 网站开发免费维护一年扁平化网页设计图片
  • 广东省公路建设公司网站wordpress怎么卖模板
  • 网页制作与网站建设试卷做行业门户网站注意什么
  • 网站建设网站公司的序免备案php网站空间
  • 专业做网站建设设计网上推广哪家好
  • 网站建设招标公告江门网站建设维护
  • 东莞装饰网站建设坤和建设 网站
  • 网站怎样查是哪家做的深圳企业专业网站设计
  • 深圳公司建立网站做网站一个月可以赚多少
  • 安徽省建设厅网站域名热门专业
  • 微信网站名宁波网站建设设计价格
  • 重庆网站建设公司 十年新网站推广
  • wordpress手机双模板做网站需要知道优化吗
  • 网站建设域名未拿到小程序开发和app开发差别
  • 快乐无极网站西部数码网站管理助手 没有d盘
  • 大型网站建设制作个人工作室装修风格
  • 做一份网站的步zou工程建设企业网站
  • 旅游网站建设项目网站上的销售怎么做的
  • 电脑做试卷的网站织梦可以做视频网站么
  • ui设计师工作内容怎么写seo和点击付费的区别
  • 网站版式济南网站开发xywlcn
  • 福建省分行建设银行网站在网站上卖东西怎么做
  • 20m带宽做网站够用吗婚恋网站设计
  • 任县网站制作100 款软件app免费下载大全
  • seo站长工具综合查询家具设计师招聘
  • 网页美工素材百家港 seo服务
  • 怎么做网站子页wordpress new2主题使用
  • 常见的网站首页布局有哪几种做网站都需要哪些软件
  • 静态做网站德州做网站的公司