欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用C++單例模式實(shí)現(xiàn)高性能配置管理器

 更新時(shí)間:2023年04月20日 14:07:02   作者:Michael_Good  
這篇文章主要為大家詳細(xì)介紹了如何利用C++單例模式實(shí)現(xiàn)高性能配置管理器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下

代碼中,使用了單例模式來創(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++讀取wav文件中的PCM數(shù)據(jù)

    C++讀取wav文件中的PCM數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了C++讀取wav文件中的PCM數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++?const與constexpr區(qū)別小結(jié)

    C++?const與constexpr區(qū)別小結(jié)

    C++11標(biāo)準(zhǔn)中,const用于為修飾的變量添加只讀屬性,而constexpr關(guān)鍵字則用于指明其后是一個(gè)常量,本文主要介紹了C++?const與constexpr區(qū)別小結(jié),感興趣的可以了解一下
    2024-03-03
  • C語言超詳細(xì)講解排序算法下篇

    C語言超詳細(xì)講解排序算法下篇

    今天我們主要難點(diǎn)有快速排序和歸并排序,會(huì)簡單涉及到二叉樹相關(guān)知識(shí),相對(duì)來說比較抽象!所以如果有看不懂或者不明白的地方可以看看我之前的詳解二叉樹
    2022-04-04
  • C++ 中引用與指針的區(qū)別實(shí)例詳解

    C++ 中引用與指針的區(qū)別實(shí)例詳解

    這篇文章主要介紹了C++ 中引用與指針的區(qū)別實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C語言必背的一些經(jīng)典程序代碼實(shí)例

    C語言必背的一些經(jīng)典程序代碼實(shí)例

    C語言是一種高級(jí)編程語言,具有很多優(yōu)點(diǎn),下面這篇文章主要給大家介紹了關(guān)于C語言必背的一些經(jīng)典程序代碼,文中通過詳細(xì)的實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • C語言利用面試真題理解指針的使用

    C語言利用面試真題理解指針的使用

    C語言這門課程在計(jì)算機(jī)的基礎(chǔ)教學(xué)中一直占有比較重要的地位,然而要想突破C語言的學(xué)習(xí),對(duì)指針的掌握是非常重要的,本文將具體針對(duì)指針的基礎(chǔ)做詳盡的介紹
    2022-08-08
  • Qt 鼠標(biāo)/觸屏繪制平滑曲線(支持矢量/非矢量方式)

    Qt 鼠標(biāo)/觸屏繪制平滑曲線(支持矢量/非矢量方式)

    這篇文章主要介紹了Qt 鼠標(biāo)/觸屏繪制平滑曲線(支持矢量/非矢量方式),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • C語言動(dòng)態(tài)鏈表實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)

    C語言動(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-07
  • C語言中位運(yùn)算符"|"的5種高級(jí)用法總結(jié)

    C語言中位運(yùn)算符"|"的5種高級(jí)用法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了C語言中位運(yùn)算符"|"的5種高級(jí)用法,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的可以參考一下
    2023-04-04
  • 基于C語言實(shí)現(xiàn)簡單的走迷宮游戲

    基于C語言實(shí)現(xiàn)簡單的走迷宮游戲

    這篇文章主要介紹了基于C語言實(shí)現(xiàn)簡單的走迷宮游戲,用到雙向隊(duì)列,方便在運(yùn)行完畢后輸出經(jīng)過的點(diǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-04-04

最新評(píng)論