亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

代碼中,使用了單例模式來創(chuàng)建配置管理器對象,保證了整個程序中只有一個配置管理器對象。配置管理器中包含了配置項數(shù)組、配置項數(shù)量、互斥鎖等成員,通過這些成員來實現(xiàn)配置文件的讀取和配置項的獲取。在主函數(shù)中,獲取了一個配置項的值,并打印出來,最后銷毀互斥鎖、釋放內存。

#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; // 配置項數(shù)組
    int count; // 配置項數(shù)量
    pthread_mutex_t lock; // 互斥鎖
} ConfigManager;

// 配置管理器單例結構體
typedef struct {
    ConfigManager* manager; // 配置管理器指針
} ConfigManagerSingleton;

static ConfigManagerSingleton* instance = NULL; // 配置管理器單例對象指針

// 讀取配置文件函數(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);
}

// 獲取配置項值函數(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;
}

// 獲取配置管理器單例對象函數(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(); // 獲取配置管理器單例對象
    const char* value = get_config_value("key1"); // 獲取配置項值
    if (value != NULL) {
        printf("key1=%s\n", value);
    }
    pthread_mutex_destroy(&manager->lock); // 銷毀互斥鎖
    free(manager->items); // 釋放配置項數(shù)組內存
    free(manager); // 釋放配置管理器內存
    free(instance); // 釋放配置管理器單例對象內存
    return 0;
}

到此這篇關于利用C++單例模式實現(xiàn)高性能配置管理器的文章就介紹到這了,更多相關C++單例模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

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

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

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

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

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

    C語言超詳細講解排序算法下篇

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

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

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

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

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

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

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

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

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

    C語言動態(tài)鏈表實現(xiàn)學生學籍管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言動態(tài)鏈表實現(xiàn)學生學籍管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • C語言中位運算符"|"的5種高級用法總結

    C語言中位運算符"|"的5種高級用法總結

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

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

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

最新評論