docs: update memory and threading API docs
This commit is contained in:
@@ -1,37 +1,47 @@
|
||||
# Thread::Yield
|
||||
|
||||
```cpp
|
||||
static void Yield()
|
||||
static void Yield();
|
||||
```
|
||||
|
||||
让出当前线程的时间片,允许操作系统调度器将 CPU 时间分配给其他就绪线程。
|
||||
静态方法,向调度器提示当前线程愿意让出 CPU 时间片,让其他线程有机会执行。此方法适用于需要 busy-wait 或自旋等待的场景。
|
||||
|
||||
实现基于 `std::this_thread::yield()`。调度器行为取决于操作系统。
|
||||
|
||||
**警告:** 过度使用 `Yield()` 可能导致性能问题。在多数情况下,使用 `Sleep()` 是更好的选择。
|
||||
|
||||
**参数:** 无
|
||||
|
||||
**返回:** 无
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
**使用场景:**
|
||||
- 在自旋等待某个条件时调用,避免浪费 CPU 周期。
|
||||
- 在长时间循环中定期让出时间片,提高其他线程的响应性。
|
||||
**线程安全:** ✅
|
||||
|
||||
**示例:**
|
||||
|
||||
```cpp
|
||||
volatile bool ready = false;
|
||||
#include "XCEngine/Threading/Thread.h"
|
||||
#include <atomic>
|
||||
#include <iostream>
|
||||
|
||||
Thread worker;
|
||||
worker.Start([]() {
|
||||
ready = true;
|
||||
}, "WorkerThread");
|
||||
using namespace XCEngine::Threading;
|
||||
|
||||
// 忙等待,但定期让出时间片
|
||||
while (!ready) {
|
||||
Thread::Yield();
|
||||
int main() {
|
||||
std::atomic<bool> ready{false};
|
||||
|
||||
Thread t;
|
||||
t.Start([&ready]() {
|
||||
while (!ready.load()) {
|
||||
Thread::Yield();
|
||||
}
|
||||
std::cout << "Worker: ready flag is set!" << std::endl;
|
||||
}, "YieldWorker");
|
||||
|
||||
Thread::Sleep(100);
|
||||
ready.store(true);
|
||||
|
||||
t.Join();
|
||||
return 0;
|
||||
}
|
||||
|
||||
worker.Join();
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
Reference in New Issue
Block a user