iLogtail 的 ConfigManager 是单例模式的典型应用。作为衔接用户采集配置和内部采集任务的进程级管理机制,ConfigManager 负责加载、解析用户采集配置并建立具体的采集任务。采用单例模式可以有效避免多个实例间状态同步的问题,并提供统一的全局接口方便各模块调用。实现上,通过静态函数 GetInstance() 内的静态变量确保全局只有一个实例,同时将构造函数、析构函数、拷贝构造函数和赋值运算符都设为私有并标记为删除,防止通过拷贝或赋值创建多个对象。此外利用 C++11 的 Magic Static 特性保证线程安全:当并发线程同时进入静态变量声明语句时,后续线程会阻塞等待初始化完成。iLogtail 启动时通过单例 ConfigManager 初始加载所有采集配置,运行过程中也支持动态加载变更的配置。




