Files
XCEngine/docs/api/threading/spinlock/lock.md

36 lines
783 B
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SpinLock::Lock
```cpp
void Lock()
```
获取自旋锁。如果锁已被其他线程持有则使用忙等待spin持续轮询直到获取到锁。
**参数:**
**返回:**
**复杂度:** 平均 O(1),最坏情况取决于竞争程度
**注意:**
- 适用于临界区极短(几个 CPU 指令)的场景,避免线程切换开销。
- 在锁持有时间较长或多核竞争激烈时,会浪费大量 CPU 周期,此时应使用 Mutex。
- 同一线程对同一个 SpinLock 重复加锁会导致死锁。
**示例:**
```cpp
Threading::SpinLock spinLock;
int64_t fastCounter = 0;
void IncrementFast() {
spinLock.Lock();
++fastCounter;
spinLock.Unlock();
}
```
## 相关文档
- [SpinLock 总览](spinlock.md) - 返回类总览