利用C++单例模式实现高性能配置管理器
短信预约 -IT技能 免费直播动态提醒
代码中,使用了单例模式来创建配置管理器对象,保证了整个程序中只有一个配置管理器对象。配置管理器中包含了配置项数组、配置项数量、互斥锁等成员,通过这些成员来实现配置文件的读取和配置项的获取。在主函数中,获取了一个配置项的值,并打印出来,最后销毁互斥锁、释放内存。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#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++单例模式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341