利用C++單例模式實(shí)現(xiàn)高性能配置管理器
代碼中,使用了單例模式來創(chuàng)建配置管理器對(duì)象,保證了整個(gè)程序中只有一個(gè)配置管理器對(duì)象。配置管理器中包含了配置項(xiàng)數(shù)組、配置項(xiàng)數(shù)量、互斥鎖等成員,通過這些成員來實(shí)現(xiàn)配置文件的讀取和配置項(xiàng)的獲取。在主函數(shù)中,獲取了一個(gè)配置項(xiàng)的值,并打印出來,最后銷毀互斥鎖、釋放內(nèi)存。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <pthread.h> #define MAX_CONFIG_SIZE 1024 // 配置項(xiàng)結(jié)構(gòu)體 typedef struct { char* key; // 配置項(xiàng)鍵 char* value; // 配置項(xiàng)值 } ConfigItem; // 配置管理器結(jié)構(gòu)體 typedef struct { ConfigItem* items; // 配置項(xiàng)數(shù)組 int count; // 配置項(xiàng)數(shù)量 pthread_mutex_t lock; // 互斥鎖 } ConfigManager; // 配置管理器單例結(jié)構(gòu)體 typedef struct { ConfigManager* manager; // 配置管理器指針 } ConfigManagerSingleton; static ConfigManagerSingleton* instance = NULL; // 配置管理器單例對(duì)象指針 // 讀取配置文件函數(shù) 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); } // 獲取配置項(xiàng)值函數(shù) 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; } // 獲取配置管理器單例對(duì)象函數(shù) 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(); // 獲取配置管理器單例對(duì)象 const char* value = get_config_value("key1"); // 獲取配置項(xiàng)值 if (value != NULL) { printf("key1=%s\n", value); } pthread_mutex_destroy(&manager->lock); // 銷毀互斥鎖 free(manager->items); // 釋放配置項(xiàng)數(shù)組內(nèi)存 free(manager); // 釋放配置管理器內(nèi)存 free(instance); // 釋放配置管理器單例對(duì)象內(nèi)存 return 0; }
到此這篇關(guān)于利用C++單例模式實(shí)現(xiàn)高性能配置管理器的文章就介紹到這了,更多相關(guān)C++單例模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++?const與constexpr區(qū)別小結(jié)
C++11標(biāo)準(zhǔn)中,const用于為修飾的變量添加只讀屬性,而constexpr關(guān)鍵字則用于指明其后是一個(gè)常量,本文主要介紹了C++?const與constexpr區(qū)別小結(jié),感興趣的可以了解一下2024-03-03Qt 鼠標(biāo)/觸屏繪制平滑曲線(支持矢量/非矢量方式)
這篇文章主要介紹了Qt 鼠標(biāo)/觸屏繪制平滑曲線(支持矢量/非矢量方式),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04C語言動(dòng)態(tài)鏈表實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言動(dòng)態(tài)鏈表實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07C語言中位運(yùn)算符"|"的5種高級(jí)用法總結(jié)
這篇文章主要為大家詳細(xì)介紹了C語言中位運(yùn)算符"|"的5種高級(jí)用法,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的可以參考一下2023-04-04