1. 设计理念
Magnet 库专注于解决 C++ 多线程开发中的两大痛点:
- 生命周期管理:通过
Control
基类自动追踪线程状态 - 资源竞争规避:内置原子计数器(
cn
)与自旋锁(uping
)实现轻量级同步
2. 核心组件解析
// 线程状态控制基类
class Control {
std::atomic<bool> __lifing{true}; // 原子化生命周期标识
public:
virtual bool decide() = 0; // 决策逻辑接口
virtual void action() = 0; // 执行逻辑接口
bool destroy() {
__lifing.store(false); // 原子化状态修改
cn--; // 全局计数器同步
return true;
}
};
- 线程调度流程
graph LR
A[用户创建派生类对象] --> B(mag_update 注册)
B --> C{cn 原子递增}
C --> D[创建分离线程]
D --> E[循环检测 decide()]
E -->|true| F[执行 action()]
F --> G{调用 destroy()?}
G -->|是| H[cn 原子递减]
- 性能优化策略
自旋锁优化:将 while(uping){} 改为带休眠的忙等待
内存对齐:对原子变量使用 alignas(64) 避免伪共享
批量提交:支持多任务打包提交减少锁竞争