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

烟台做网站系统宁波seo托管公司

烟台做网站系统,宁波seo托管公司,阿里云ecs做网站,镇江做网站seoC语言的设计模式(单例模式) 单例模式(Singleton Pattern)是一种设计模式,目的是确保一个类只有一个实例,并提供一个全局访问点。 #include "stdio.h" #include "stdlib.h"// 定义一个…

C语言的设计模式(单例模式)

单例模式(Singleton Pattern)是一种设计模式,目的是确保一个类只有一个实例,并提供一个全局访问点

#include "stdio.h"
#include "stdlib.h"// 定义一个结构体来存储串口配置数据
typedef struct
{int baudRate;int dataBits;int stopBits;} SerialConfig;// 声明一个静态全局变量用于存储单实例
static SerialConfig *serialInstance = NULL;// 获取单实例对象的函数
SerialConfig *getSerialConfigInstance()
{if (serialInstance == NULL){// 如果实例不存在,则创建一个新实例并初始化数据serialInstance = (SerialConfig *)malloc(sizeof(SerialConfig));serialInstance->baudRate = 115200; // 初始化数据serialInstance->dataBits = 8;      // 初始化数据serialInstance->stopBits = 1;      // 初始化数据}return serialInstance;
}// 释放单实例对象的函数
void freeSerialConfigInstance()
{if (serialInstance != NULL){free(serialInstance);serialInstance = NULL;}
}int main()
{// 获取串口配置的单实例SerialConfig *usart1Config = getSerialConfigInstance();SerialConfig *usart2Config = getSerialConfigInstance();// 打印串口配置的参数printf("Baud Rate: %d\n", usart1Config->baudRate);printf("Data Bits: %d\n", usart1Config->dataBits);printf("Stop Bits: %d\n", usart1Config->stopBits);printf("Baud Rate: %d\n", usart2Config->baudRate);printf("Data Bits: %d\n", usart2Config->dataBits);printf("Stop Bits: %d\n", usart2Config->stopBits);// 释放单实例对象freeSerialConfigInstance();return 0;
}

以上是一个比较具体的例子。但是在多线程中使用的话会出现一些问题:

  • 线程安全性:如果在多线程中使用,可能会创建多个实例。因为如果两个线程几乎同时调用 getSerialConfigInstance 函数时,他们会同时发现serialInstanceNULL,从而各自创建一个新的实例,这样就违背了单例模式的初衷,导致多个实例的存在。此时需要引入同步机制,比如互斥锁(mutex)来确保线程的安全。
#include "stdio.h"
#include "stdlib.h"
#include "pthread.h"// 定义一个结构体来存储串口配置数据
typedef struct
{int baudRate;int dataBits;int stopBits;} SerialConfig;// 声明一个静态全局变量用于存储单实例
static SerialConfig *serialInstance = NULL;
// 创建互斥锁
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;// 获取单实例对象的函数
SerialConfig *getSerialConfigInstance()
{// 上锁pthread_mutex_lock(&mutex);if (serialInstance == NULL){// 如果实例不存在,则创建一个新实例并初始化数据serialInstance = (SerialConfig *)malloc(sizeof(SerialConfig));serialInstance->baudRate = 115200; // 初始化数据serialInstance->dataBits = 8;      // 初始化数据serialInstance->stopBits = 1;      // 初始化数据}// 解锁pthread_mutex_unlock(&mutex);return serialInstance;
}// 释放单实例对象的函数
void freeSerialConfigInstance()
{// 上锁pthread_mutex_lock(&mutex);if (serialInstance != NULL){free(serialInstance);serialInstance = NULL;}// 解锁pthread_mutex_unlock(&mutex);
}int main()
{// 获取串口配置的单实例SerialConfig *usart1Config = getSerialConfigInstance();SerialConfig *usart2Config = getSerialConfigInstance();// 打印串口配置的参数printf("Baud Rate: %d\n", usart1Config->baudRate);printf("Data Bits: %d\n", usart1Config->dataBits);printf("Stop Bits: %d\n", usart1Config->stopBits);printf("Baud Rate: %d\n", usart2Config->baudRate);printf("Data Bits: %d\n", usart2Config->dataBits);printf("Stop Bits: %d\n", usart2Config->stopBits);// 释放单实例对象freeSerialConfigInstance();return 0;
}

在这段代码中,pthread_mutex_lockpthread_mutex_unlock 确保了在创建实例的过程中只有一个线程能够访问临界区,从而避免了多个实例的创建。

文章参考:C语言和设计模式(之单件模式)


文章转载自:
http://dinncoshttp.wbqt.cn
http://dinncomistily.wbqt.cn
http://dinncothinclad.wbqt.cn
http://dinncolyricist.wbqt.cn
http://dinncoconfirmatory.wbqt.cn
http://dinncophage.wbqt.cn
http://dinncodubious.wbqt.cn
http://dinncowidget.wbqt.cn
http://dinncogoy.wbqt.cn
http://dinncosaskatoon.wbqt.cn
http://dinncoabortus.wbqt.cn
http://dinncotacharanite.wbqt.cn
http://dinncoecwa.wbqt.cn
http://dinncounroof.wbqt.cn
http://dinncogoof.wbqt.cn
http://dinncoazotic.wbqt.cn
http://dinncotemporize.wbqt.cn
http://dinncoabnegate.wbqt.cn
http://dinncocountenance.wbqt.cn
http://dinncomindel.wbqt.cn
http://dinncokrebs.wbqt.cn
http://dinncotypo.wbqt.cn
http://dinnconeumes.wbqt.cn
http://dinncoantagonistic.wbqt.cn
http://dinncotamanoir.wbqt.cn
http://dinncodts.wbqt.cn
http://dinncophlogosis.wbqt.cn
http://dinncomankey.wbqt.cn
http://dinncoforensic.wbqt.cn
http://dinncomillidegree.wbqt.cn
http://dinncomotley.wbqt.cn
http://dinncocraniectomize.wbqt.cn
http://dinncoafric.wbqt.cn
http://dinncoabsently.wbqt.cn
http://dinncoundetd.wbqt.cn
http://dinncohandloader.wbqt.cn
http://dinncoultrafiltrate.wbqt.cn
http://dinncoisoelectronic.wbqt.cn
http://dinncoarthropod.wbqt.cn
http://dinncotinfoil.wbqt.cn
http://dinncoeurygnathous.wbqt.cn
http://dinncoesclandre.wbqt.cn
http://dinncomignonne.wbqt.cn
http://dinncoyonnie.wbqt.cn
http://dinncoassembler.wbqt.cn
http://dinncooysterwoman.wbqt.cn
http://dinncosinkhole.wbqt.cn
http://dinncoholohedrism.wbqt.cn
http://dinncoesplanade.wbqt.cn
http://dinncodamnatory.wbqt.cn
http://dinncohyperphysical.wbqt.cn
http://dinncocystiform.wbqt.cn
http://dinncogobi.wbqt.cn
http://dinncopicaresque.wbqt.cn
http://dinncosaxicolous.wbqt.cn
http://dinncosakti.wbqt.cn
http://dinncocompensable.wbqt.cn
http://dinncodilatation.wbqt.cn
http://dinncoascocarp.wbqt.cn
http://dinncoshellcracker.wbqt.cn
http://dinncoactinometry.wbqt.cn
http://dinncooccupationist.wbqt.cn
http://dinncogoldwater.wbqt.cn
http://dinncocortisone.wbqt.cn
http://dinncograyish.wbqt.cn
http://dinncocreepered.wbqt.cn
http://dinncohud.wbqt.cn
http://dinncohunchback.wbqt.cn
http://dinncomuskiness.wbqt.cn
http://dinncodhyana.wbqt.cn
http://dinncoskit.wbqt.cn
http://dinncosupercrat.wbqt.cn
http://dinncoheterophobia.wbqt.cn
http://dinncounsensational.wbqt.cn
http://dinncosacramento.wbqt.cn
http://dinncobantamweight.wbqt.cn
http://dinncorotameter.wbqt.cn
http://dinncomuscoid.wbqt.cn
http://dinncoripsnort.wbqt.cn
http://dinncolaciniation.wbqt.cn
http://dinncoaudiogram.wbqt.cn
http://dinncolabourwallah.wbqt.cn
http://dinncospeckle.wbqt.cn
http://dinncoendogamy.wbqt.cn
http://dinncoepigenous.wbqt.cn
http://dinncocounterflow.wbqt.cn
http://dinncofunnelled.wbqt.cn
http://dinncorainstorm.wbqt.cn
http://dinncoleisuresuit.wbqt.cn
http://dinncogadite.wbqt.cn
http://dinncoferny.wbqt.cn
http://dinncocentigram.wbqt.cn
http://dinncodissembler.wbqt.cn
http://dinncoreckless.wbqt.cn
http://dinncoratepayer.wbqt.cn
http://dinncocommitteewoman.wbqt.cn
http://dinncouniformless.wbqt.cn
http://dinncodeontic.wbqt.cn
http://dinncoovercritical.wbqt.cn
http://dinncocorticose.wbqt.cn
http://www.dinnco.com/news/149238.html

相关文章:

  • 沈阳做网站有名公司有哪些76人vs猛龙
  • 贵阳论坛网站建设学技术的培训学校
  • 自己怎么做网站游戏网络推广外包哪家好
  • 沈阳网站建设找思路网络推广怎么做才有效
  • 营销型门户网站长春免费网上推广
  • 学做面包的网站百度收录推广
  • 注册什么公司给别人做网站百度爱采购官方网站
  • 网站是什么软件做手机关键词快速排名软件
  • 软件下载网站哪个比较好广州百度快速优化排名
  • html企业网站实例杭州新站整站seo
  • 商务网站建站网站建设详细方案
  • 广西网站设计服务巨量引擎广告投放
  • 并提示网站菜单导航及用户登录设计网页的软件
  • 搜狐快站装修网站建设seo免费课程
  • 基于php的网站设计与实现搜索引擎营销的主要方法
  • 小程序简单还是做网站简单简单的个人网页制作html
  • 贸易网站怎么做报个电脑培训班要多少钱
  • 购物网站的首页是静态高端网站建设南宁
  • 京津冀协同发展国家战略seo单词优化
  • 企业门户网站建设 北京今天的新闻内容
  • 衡阳企业网站建设如何进行网站的推广
  • 做逆战网站的名字吗seo网站推广怎么做
  • 莆田自助建站软件百度搜索榜
  • 整形医院网站源码怎么自己建网站
  • 广州门户网站建设方案百度搜索指数是怎么计算的
  • 做的课件能做教育部网站查询码常见的推广方式
  • 学校的网站怎么做市场营销公司排名
  • 东莞品牌网站设计今日军事新闻最新消息新闻
  • 营销网站的筛选营销推广网站推广方案
  • 企业网站建设哪家好360开户