天天微速讯:利用C++单例模式实现高性能配置管理器

时间:2023-04-22 06:40:50 来源: 脚本之家


(相关资料图)

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

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

标签:

相关文章

四川11人被骗偷渡出境“挣大钱” 主犯被判刑2年

成都4月23日电 (吴平华 黄静)近日,四川资阳市公安局临空经济区分局破获了一起11人偷越国边境案,目前...

来源:2022-04-24

全民战疫要坚持的12个健康生活细节

全民战疫,细节制胜!4月21日,上海市健康促进委员会办公室、上海市健康促进中心向全体市民发布倡议书,...

来源:2022-04-24

中国青少年儿童身心健康教育管理委员会正式成立

北京4月23日电 (记者 高凯)23日,中国青少年儿童身心健康教育管理委员会在北京会议中心正式成立。 当日...

来源:2022-04-24

吉林省遭遇“沙尘周” 局地瞬时风力超10级

长春4月23日电 (记者 郭佳)23日,狂风卷着沙土在吉林省多地肆虐。记者从吉林省气象台获悉,这是该省入...

来源:2022-04-24

青海西宁解“静”首日见闻:解“静”不解防

西宁4月23日电 题:青海西宁解“静”首日见闻:解“静”不解防 作者 祁增蓓 23日上午,位于青海省西宁...

来源:2022-04-24

精彩推送