std::this_thread::yield
来自 cppreference.cn
定义于头文件 <thread> |
||
void yield() noexcept; |
(自 C++11 起) | |
向实现提供提示,以重新调度线程的执行,允许其他线程运行。
目录 |
[编辑] 参数
(无)
[编辑] 返回值
(无)
[编辑] 注解
此函数的具体行为取决于实现,特别是取决于所用操作系统调度器的机制和系统状态。例如,先进先出实时调度器 (Linux 中的 SCHED_FIFO
) 会暂停当前线程,并将其置于相同优先级就绪运行线程队列的末尾,如果没有其他相同优先级的线程,则 yield
不会产生任何效果。
[编辑] 示例
运行此代码
#include <chrono> #include <iostream> #include <thread> // "busy sleep" while suggesting that other threads run // for a small amount of time void little_sleep(std::chrono::microseconds us) { auto start = std::chrono::high_resolution_clock::now(); auto end = start + us; do { std::this_thread::yield(); } while (std::chrono::high_resolution_clock::now() < end); } int main() { auto start = std::chrono::high_resolution_clock::now(); little_sleep(std::chrono::microseconds(100)); auto elapsed = std::chrono::high_resolution_clock::now() - start; std::cout << "waited for " << std::chrono::duration_cast<std::chrono::microseconds>(elapsed).count() << " microseconds\n"; }
可能的输出
waited for 128 microseconds
[编辑] 参见
C 文档 关于 thrd_yield
|