第11篇:SkillRegistry 单例模式的双重检查锁定实现细节

📅 2026/8/7 10:58:02
第11篇:SkillRegistry 单例模式的双重检查锁定实现细节
SkillRegistry 单例模式的双重检查锁定实现细节在桌面 AI 助手中,SkillRegistry 是整个系统的"能力中枢"——66 个技能的注册、查找、调用都经过它。它需要在应用启动时被初始化一次,在运行时被多线程并发访问(UI 线程发起查询、后台线程执行 Skill、初始化线程注册技能)。本文从并发编程角度拆解 SkillRegistry 的线程安全实现:_instance和_lock的双重检查锁定单例创建、_registry_lock保护注册表读写、call_skill中"锁内获取引用、锁外执行"的分离设计。一、问题提出:为什么 SkillRegistry 需要线程安全SkillRegistry 面临两个并发场景:场景一:初始化阶段的并发注册。init_assistant()在应用启动时被调用,注册 60 个服务层 Skill + 6 个工具层 Skill。虽然init_assistant()自身用了双重检查锁定确保只执行一次,但注册过程涉及多次register()调用,每次都修改_skills字典和_categories字典。如果此时有其他线程通过get_skill()或