std::this_thread::yield
来自 cppreference.com
定义在头文件 <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
|