修复问题: - containers: HashMap include 路径修复 - core: RefCounted 析构函数访问级别, Event::begin/end 返回值说明 - memory: LinearAllocator::GetMarker 返回偏移量非指针 - resources: LoadAsync 示例使用不存在的模板方法 - rhi: OpenGL 链接错误, ShaderType 枚举缺失8个类型, 链接修复 - threading: SpinLock STL 兼容方法说明, Mutex const 方法说明
54 lines
1.2 KiB
Markdown
54 lines
1.2 KiB
Markdown
# SpinLock
|
|
|
|
**命名空间**: `XCEngine::Threading`
|
|
|
|
**类型**: `class`
|
|
|
|
**头文件**: `XCEngine/Threading/SpinLock.h`
|
|
|
|
**描述**: 自旋锁封装类,使用原子操作实现,适用于保护极短的临界区。
|
|
|
|
## 概述
|
|
|
|
`SpinLock` 是一个轻量级的自旋锁实现,使用 `std::atomic_flag` 的 test-and-set 操作。它在获取锁失败时不断轮询,不会导致线程切换,非常适合保护非常短的临界区(如简单的计数器递增)。
|
|
|
|
## 公共方法
|
|
|
|
| 方法 | 描述 |
|
|
|------|------|
|
|
| [`Lock`](lock.md) | 获取锁(忙等待) |
|
|
| [`Unlock`](unlock.md) | 释放锁 |
|
|
| [`TryLock`](trylock.md) | 尝试获取锁(非阻塞) |
|
|
|
|
## STL 兼容方法
|
|
|
|
支持 `lock()`, `unlock()`, `try_lock()` 以兼容 STL 的 lockable 概念。
|
|
|
|
## 使用示例
|
|
|
|
```cpp
|
|
Threading::SpinLock spinLock;
|
|
int counter = 0;
|
|
|
|
// 保护极短的临界区
|
|
void FastIncrement() {
|
|
spinLock.Lock();
|
|
++counter;
|
|
spinLock.Unlock();
|
|
}
|
|
|
|
// TryLock 用法
|
|
void SafeIncrement() {
|
|
if (spinLock.TryLock()) {
|
|
++counter;
|
|
spinLock.Unlock();
|
|
}
|
|
}
|
|
```
|
|
|
|
## 相关文档
|
|
|
|
- [Mutex](../mutex/mutex.md) - 互斥锁
|
|
- [ReadWriteLock](../readwritelock/readwritelock.md) - 读写锁
|
|
- [../threading/threading.md](../threading.md) - 模块总览
|