2.8 KiB
2.8 KiB
Threading
命名空间: XCEngine::Threading
类型: module
描述: 提供线程封装、基础同步原语和一套早期任务系统骨架。
概述
XCEngine::Threading 当前由两部分组成:
Mutex、SpinLock、ReadWriteLock和Thread这类直接可用的并发基础设施。ITask、TaskGroup、TaskSystem这类面向 job system 的任务抽象。
这种分层很符合商业引擎常见做法:底层仍然需要明确的锁和线程封装,上层再逐步演进到任务图、主线程回调和并行 for 之类的调度模型。
当前实现成熟度
这一组 API 的成熟度差异很大,需要分开看:
Mutex与SpinLock本质上是对标准库原语的薄封装,语义相对直接。ReadWriteLock实现了写者优先的读写锁,但没有 try-lock、升级/降级或 RAII 辅助类型。Thread可以封装std::thread生命周期,但线程名称只是本地字符串,不会设置 OS 线程名,而且 ID 口径与GetCurrentId()不一致。ITask与LambdaTask的抽象形状已经具备,但TaskGroup和TaskSystem目前仍然明显属于“骨架阶段”。TaskSystem当前存在严重的生命周期和同步问题,因此不能把它当成商用级 job system 使用。
设计要点
- 大写接口如
Lock()/Unlock()更接近引擎自身命名风格。 - 小写接口如
lock()/unlock()/try_lock()的存在,是为了兼容std::lock_guard这类标准 Lockable 习惯用法。 ITask采用侵入式引用计数,说明这套任务系统原本是朝“跨线程提交和自动释放任务对象”这个方向设计的。
测试覆盖现状
当前测试只覆盖了:
MutexSpinLockITask/LambdaTask的最基础行为
ReadWriteLock、Thread、TaskGroup 和 TaskSystem 当前没有看到对应单测,因此相关文档会更强调源码现状和风险边界。
头文件
- LambdaTask -
LambdaTask.h - Mutex -
Mutex.h - ReadWriteLock -
ReadWriteLock.h - SpinLock -
SpinLock.h - Task -
Task.h - TaskGroup -
TaskGroup.h - TaskSystem -
TaskSystem.h - TaskSystemConfig -
TaskSystemConfig.h - Thread -
Thread.h - Threading -
Threading.h
相关指南
- Synchronization And Task System Limits - 解释为什么引擎要同时保留锁、线程和任务系统抽象,以及当前实现距离商业级 job system 还差哪些关键能力。