(资料图片仅供参考)
代码中,使用了单例模式来创建配置管理器对象,保证了整个程序中只有一个配置管理器对象。配置管理器中包含了配置项数组、配置项数量、互斥锁等成员,通过这些成员来实现配置文件的读取和配置项的获取。在主函数中,获取了一个配置项的值,并打印出来,最后销毁互斥锁、释放内存。
#include#include #include #include #define MAX_CONFIG_SIZE 1024 // 配置项结构体 typedef struct { char* key; // 配置项键 char* value; // 配置项值 } ConfigItem; // 配置管理器结构体 typedef struct { ConfigItem* items; // 配置项数组 int count; // 配置项数量 pthread_mutex_t lock; // 互斥锁 } ConfigManager; // 配置管理器单例结构体 typedef struct { ConfigManager* manager; // 配置管理器指针 } ConfigManagerSingleton; static ConfigManagerSingleton* instance = NULL; // 配置管理器单例对象指针 // 读取配置文件函数 void read_config_file(const char* filename) { ConfigManager* manager = instance->manager; FILE* file = fopen(filename, "r"); if (file == NULL) { return; } char line[MAX_CONFIG_SIZE]; while (fgets(line, sizeof(line), file) != NULL) { char* key = strtok(line, "="); char* value = strtok(NULL, "\n"); if (key != NULL && value != NULL) { ConfigItem item; item.key = strdup(key); item.value = strdup(value); pthread_mutex_lock(&manager->lock); manager->items[manager->count++] = item; pthread_mutex_unlock(&manager->lock); } } fclose(file); } // 获取配置项值函数 const char* get_config_value(const char* key) { ConfigManager* manager = instance->manager; for (int i = 0; i < manager->count; i++) { if (strcmp(manager->items[i].key, key) == 0) { return manager->items[i].value; } } return NULL; } // 获取配置管理器单例对象函数 ConfigManager* get_config_manager_instance() { if (instance == NULL) { instance = (ConfigManagerSingleton*)malloc(sizeof(ConfigManagerSingleton)); instance->manager = (ConfigManager*)malloc(sizeof(ConfigManager)); instance->manager->items = (ConfigItem*)malloc(sizeof(ConfigItem) * MAX_CONFIG_SIZE); instance->manager->count = 0; pthread_mutex_init(&instance->manager->lock, NULL); read_config_file("config.txt"); } return instance->manager; } int main() { ConfigManager* manager = get_config_manager_instance(); // 获取配置管理器单例对象 const char* value = get_config_value("key1"); // 获取配置项值 if (value != NULL) { printf("key1=%s\n", value); } pthread_mutex_destroy(&manager->lock); // 销毁互斥锁 free(manager->items); // 释放配置项数组内存 free(manager); // 释放配置管理器内存 free(instance); // 释放配置管理器单例对象内存 return 0; }
到此这篇关于利用C++单例模式实现高性能配置管理器的文章就介绍到这了,更多相关C++单例模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
标签:
仓储物流“成渝圈”如何乘势而上? 12月3日,连接昆明和万象的中老铁路全线开通运营,被惠及的显...
两件西周青铜簋时隔三千年成功配对 考古工作者介绍,这个铜簋的盖、身分别时隔40余年出土,纹饰...
“医保砍价”不是一个人在战斗 晁星 “我眼泪都快掉下来了”“每一个小群体都不该被放弃”…...
“购物成瘾”真的是一种病 刘艳 牛雅娟 本周日即将迎来“双十二”促销季,很多人又开始摩拳...
因迷恋山间风景,一男子在甘孜州稻城县海拔4000多米的无人区迷失方向,随后与同伴失联。12月的稻城...
嫌疑人DNA信息比中后,成都市公安局刑侦支队技术处DNA实验室民警白小刚一下坐在凳子上,恍惚迟疑间...
一批反映南京大屠杀历史的新书发布 新华社南京12月7日电(记者邱冰清、蒋芳)“以史为鉴,开创未来...
我在现场·照片背后的故事|电影《亲爱的》里面没有的结局,在我眼前“上映” 12月6日,在深圳市...
冥想?泡脚?不如听听助眠音乐 晚上睡不着,白天睡不醒,成为最贴合都市人群的“睡眠画像”。随...
养老话题 老年教育面临缺口 “终身教育”潜力无限 【现实挑战】“新老年”群体愿意在培养兴...
孙海洋被拐14年儿子如何找到的? 警方侦办另一宗拐骗儿童案时发现线索,通过人像比对、DNA确认找...
北京天文馆、圆明园将对未成年人免费开放 12月6日,北京天文馆发布通知称,12月8日起试行对未成...
今年全国粮食总产量再创新高 连续7年保持在1 3万亿斤以上 根据对全国31个省(区、市)的抽样调...
斑块软的很危险 硬的就无碍? 血管里的“垃圾”分类 赶快学起来! 一项最新研究显示:中国...
诺西那生钠注射液大幅降价 聚焦医保谈判背后脊髓性肌萎缩症家庭 医保目录公布那天 好多家长都...
抖音“窗花剪剪”遭抄袭 被判获赔20万元 法院认为“窗花剪剪”的这种表达方式理应受到《著作权...
公安机关近日侦破3起拐卖儿童案件 失散十几年 3组家庭终于团圆了 北京青年报记者12月6日从公...
2021年度十大网络用语发布 本报讯(记者 路艳霞)作为年度“汉语盘点”活动最具网络特色的组成部...
北京天文馆向未成年人免费开放 本报讯(记者 牛伟坤)北京天文馆对票价免费及优惠政策作出调整:1...
2021北京百个网红打卡地发布 本报讯(记者 李洋)2021北京网红打卡地推荐榜单昨晚正式发布。自然...