1.2 KiB
1.2 KiB
SpinLock
命名空间: XCEngine::Threading
类型: class
头文件: XCEngine/Threading/SpinLock.h
描述: 基于 std::atomic_flag 的轻量自旋锁。
概述
SpinLock 和 Mutex 的主要区别不在 API 形状,而在等待策略:
Mutex依赖 OS 互斥量阻塞等待。SpinLock在失败时会一直忙等,不让出 CPU。
这类锁通常只适合非常短的临界区,例如极小的元数据更新。商业引擎会保留它,是因为在高频、超短持锁窗口下,系统 mutex 的调度成本可能反而更高。
当前实现边界
- 失败时是空循环忙等,没有回退、没有
Yield()、没有 pause 指令。 - 没有公平性保证。
- 不是递归锁;同一线程重复进入会自旋死锁。
- 与
Mutex一样,同时提供了标准 Lockable 风格小写别名。
公开方法
| 方法 | 说明 |
|---|---|
| Lock | 阻塞自旋直到获得锁;同页也说明 lock() 别名。 |
| Unlock | 释放锁;同页也说明 unlock() 别名。 |
| TryLock | 尝试获得锁;同页也说明 try_lock() 别名。 |