最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

代碼中,使用了單例模式來(lái)創(chuàng)建配置管理器對(duì)象,保證了整個(gè)程序中只有一個(gè)配置管理器對(duì)象。配置管理器中包含了配置項(xiàng)數(shù)組、配置項(xiàng)數(shù)量、互斥鎖等成員,通過(guò)這些成員來(lái)實(shí)現(xiàn)配置文件的讀取和配置項(xiàng)的獲取。在主函數(shù)中,獲取了一個(gè)配置項(xiàng)的值,并打印出來(lái),最后銷(xiāo)毀互斥鎖、釋放內(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); // 銷(xiāo)毀互斥鎖
    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++中deque的使用

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

    本篇文章介紹了,深入分析C++中deque的使用。需要的朋友參考下
    2013-05-05
  • C++實(shí)現(xiàn)strcmp字符串比較的深入探討

    C++實(shí)現(xiàn)strcmp字符串比較的深入探討

    本篇文章是對(duì)使用C++實(shí)現(xiàn)strcmp字符串比較進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++11系列學(xué)習(xí)之類(lèi)型推導(dǎo)

    C++11系列學(xué)習(xí)之類(lèi)型推導(dǎo)

    這篇文章主要介紹了C++11系列學(xué)習(xí)之類(lèi)型推導(dǎo),文章基于C++的相關(guān)資料展開(kāi)對(duì)主題的詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值需要的小伙伴可參考一下
    2022-04-04
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單通訊錄

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單通訊錄

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C++實(shí)現(xiàn)圖像目標(biāo)區(qū)裁剪ImageCropping

    C++實(shí)現(xiàn)圖像目標(biāo)區(qū)裁剪ImageCropping

    本文主要介紹了C++實(shí)現(xiàn)圖像目標(biāo)區(qū)裁剪ImageCropping,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C++使用遞歸函數(shù)和棧操作逆序一個(gè)棧的算法示例

    C++使用遞歸函數(shù)和棧操作逆序一個(gè)棧的算法示例

    這篇文章主要介紹了C++使用遞歸函數(shù)和棧操作逆序一個(gè)棧的算法,結(jié)合實(shí)例形式分析了C++遞歸函數(shù)與逆序棧的相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • C++容器適配器的概念與示例

    C++容器適配器的概念與示例

    C++?STL(標(biāo)準(zhǔn)模板庫(kù))是一套功能強(qiáng)大的?C++?模板類(lèi),提供了通用的模板類(lèi)和函數(shù),這些模板類(lèi)和函數(shù)可以實(shí)現(xiàn)多種流行和常用的算法和數(shù)據(jù)結(jié)構(gòu),如向量、鏈表、隊(duì)列、棧,今天我們來(lái)探究一下stl容器適配器的使用吧
    2023-01-01
  • Qt繪制圖表的實(shí)現(xiàn)

    Qt繪制圖表的實(shí)現(xiàn)

    Qt中提供了強(qiáng)大的2D繪圖系統(tǒng),可以使用同一API實(shí)現(xiàn)在屏幕和繪圖設(shè)備上進(jìn)行繪制,本文就詳細(xì)的介紹了Qt繪制坐標(biāo)圖、柱狀圖、折線(xiàn)圖、餅圖、曲線(xiàn)圖、散點(diǎn)圖等,感興趣的可以了解一下
    2021-05-05
  • 淺談c++11閉包的實(shí)現(xiàn)

    淺談c++11閉包的實(shí)現(xiàn)

    閉包有很多種定義,一種說(shuō)法是,閉包是帶有上下文的函數(shù)。說(shuō)白了,就是有狀態(tài)的函數(shù)。更直接一些,不就是個(gè)類(lèi)嗎?換了個(gè)名字而已。本文將介紹c++11閉包的實(shí)現(xiàn),感興趣的同學(xué),可以參考下。
    2021-06-06
  • C語(yǔ)言實(shí)現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)之通用鏈表

    C語(yǔ)言實(shí)現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)之通用鏈表

    這篇文章主要為大家詳細(xì)介紹了c語(yǔ)言實(shí)現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)之通用鏈表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評(píng)論

昭通市| 花莲县| 延寿县| 龙山县| 三明市| 成安县| 徐汇区| 遂昌县| 中牟县| 应用必备| 贵阳市| 那曲县| 嵊泗县| 虎林市| 铜山县| 廊坊市| 弥渡县| 衡阳市| 关岭| 宣武区| 南涧| 德化县| 桂阳县| 临朐县| 凭祥市| 景德镇市| 襄樊市| 沙雅县| 星子县| 龙胜| 科尔| 南平市| 达日县| 依兰县| 松潘县| 海伦市| 台东县| 盐亭县| 宝山区| 芦山县| 原平市|