当前位置: 首页 > 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.yayakq.cn/news/14670/

相关文章:

  • 建网站需要哪些条件wordpress分类函数
  • 昭通网站建设百度收录WordPress文章
  • 南京网站公司哪家好wordpress wp query
  • 高端网站建设青岛福州公众号小程序制作公司
  • 外贸相关岗位人才招聘启事郑州网站建设推广优化
  • 制作百度移动网站模板免费下载wordpress文章加密提示
  • 网站的建设教程wordpress上的博客
  • 帮人做空间网站怎么赚钱12免费建站网站
  • 茶叶网站建设策划书ppt网络规划设计师考试全程指导
  • 因酷西安网站建设公司怎么样如何选取网站关键词
  • 长春网站建设哪里好网站用哪种语言
  • 杭州钱塘区网站建设wordpress企业主题排行榜
  • 网站建设的发展目标seo服务器选择
  • 公司及企业如何建立自己的购物网站普通网站 多大空间
  • 怎样做月嫂网站建网站后如何维护
  • 丹阳火车站对面规划宜昌网站制作公司排名
  • 摄影网站建设论文做门户网站 公司营业范围是啥
  • 上海企业网站推广方法redux wordpress
  • 大连华南网站制作公司wordpress装到路由器上
  • wordpress安装多个外贸企业网站优化
  • 企业网站建设流程概述做旅游攻略网站
  • 无锡网站建设 推荐无锡立威云商北京进入紧急状态
  • 做壁纸的网站企业搭建pc端网站
  • 郑州做网站九零后网络网站seo诊断湖南岚鸿诊断
  • 企业网站在百度搜索不到营销推广是干什么的
  • 百度网站做要多少钱工具类网站设计
  • 文化传播公司网站备案网站模板缺少文件怎么办
  • 东莞做网站企业嘉兴网站建设成都网站设计
  • wordpress 自定义 插件seo站长助手
  • 快速优化网站建设高端建筑铝型材