利用C++单例模式实现高性能配置管理器

 更新时间:2023年04月20日 14:07:02   作者:Michael_Good  
这篇文章主要为大家详细介绍了如何利用C++单例模式实现高性能配置管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下

代码中,使用了单例模式来创建配置管理器对象,保证了整个程序中只有一个配置管理器对象。配置管理器中包含了配置项数组、配置项数量、互斥锁等成员,通过这些成员来实现配置文件的读取和配置项的获取。在主函数中,获取了一个配置项的值,并打印出来,最后销毁互斥锁、释放内存。

#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++单例模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入分析C++中deque的使用

    深入分析C++中deque的使用

    本篇文章介绍了,深入分析C++中deque的使用。需要的朋友参考下
    2013-05-05
  • C++实现strcmp字符串比较的深入探讨

    C++实现strcmp字符串比较的深入探讨

    本篇文章是对使用C++实现strcmp字符串比较进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++11系列学习之类型推导

    C++11系列学习之类型推导

    这篇文章主要介绍了C++11系列学习之类型推导,文章基于C++的相关资料展开对主题的详细内容介绍,具有一定的参考价值需要的小伙伴可参考一下
    2022-04-04
  • C语言实现简单通讯录

    C语言实现简单通讯录

    这篇文章主要为大家详细介绍了C语言实现简易通讯录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • C++实现图像目标区裁剪ImageCropping

    C++实现图像目标区裁剪ImageCropping

    本文主要介绍了C++实现图像目标区裁剪ImageCropping,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • C++使用递归函数和栈操作逆序一个栈的算法示例

    C++使用递归函数和栈操作逆序一个栈的算法示例

    这篇文章主要介绍了C++使用递归函数和栈操作逆序一个栈的算法,结合实例形式分析了C++递归函数与逆序栈的相关操作技巧,需要的朋友可以参考下
    2017-05-05
  • C++容器适配器的概念与示例

    C++容器适配器的概念与示例

    C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈,今天我们来探究一下stl容器适配器的使用吧
    2023-01-01
  • Qt绘制图表的实现

    Qt绘制图表的实现

    Qt中提供了强大的2D绘图系统,可以使用同一API实现在屏幕和绘图设备上进行绘制,本文就详细的介绍了Qt绘制坐标图、柱状图、折线图、饼图、曲线图、散点图等,感兴趣的可以了解一下
    2021-05-05
  • 浅谈c++11闭包的实现

    浅谈c++11闭包的实现

    闭包有很多种定义,一种说法是,闭包是带有上下文的函数。说白了,就是有状态的函数。更直接一些,不就是个类吗?换了个名字而已。本文将介绍c++11闭包的实现,感兴趣的同学,可以参考下。
    2021-06-06
  • C语言实现通用数据结构之通用链表

    C语言实现通用数据结构之通用链表

    这篇文章主要为大家详细介绍了c语言实现通用数据结构之通用链表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11

最新评论