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

烟台做网站系统高端品牌网站建设

烟台做网站系统,高端品牌网站建设,中山精品网站建设机构,网推是什么意思C语言的设计模式(单例模式) 单例模式(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://www.dinnco.com/news/38860.html

相关文章:

  • 中文网站建设翻译成英文是什么意思营销渠道方案
  • 复制审查元素做网站软文街
  • 德胜门网站建设长沙网站seo优化公司
  • 深圳燃气小程序谷歌seo课程
  • 怎么做网站竞价2345网址导航应用
  • 开发一个网站大概多少钱无锡seo公司哪家好
  • 怎样申请网站呢网站链接交易
  • 衡阳网站优化免费咨询注册域名后如何建立网站
  • 网站首页界面设计seo优化技术教程
  • 邵阳网站推广网络推广100种方式
  • 最新发现的新冠病例seo专员是什么
  • 记事本网站开发网站建设公司排行榜
  • 长沙企业网站优化seo页面优化公司
  • 域名申请好了怎么做网站chrome 谷歌浏览器
  • 作网站开发需要java吗石家庄网站优化
  • 自建网站平台可以实现哪些功能百度推广费用报价单
  • 做淘宝客网站制作教程游戏优化大师官网
  • 界面设计师培训seo优化快排
  • 公共资源交易中心网优化网站制作方法大全
  • 做网站上的图片如何设定分辨率google推广费用
  • wordpress微语东莞seo网站排名优化
  • 招聘网站建设方案seo招聘
  • 华艺网站开发广州网站推广平台
  • 如何在b2b网站做外链朝阳seo排名优化培训
  • 广州设计企业网站高权重外链
  • 代做电子商务网站作业内容企业推广
  • 亚马逊网站运营怎么做湖南网站seo营销
  • visualstudio网页设计作业关键词整站排名优化
  • 手机有软件做ppt下载网站有哪些网络推广公司经营范围
  • 企业网站建设建设网络营销推广工具