std::this_thread::yield
来自cppreference.com
在标头 <thread> 定义 | ||
void yield()noexcept; | (C++11 起) | |
向实现提供一个提示,重新调度线程的执行以允许其他线程运行。
目录 |
[编辑]参数
(无)
[编辑]返回值
(无)
[编辑]注解
此函数的确切行为依赖于实现,特别是取决于使用中的 OS 调度器机制和系统状态。例如,先进先出实时调度器(Linux 的 SCHED_FIFO
)会挂起当前线程并将它放到准备运行的同优先级线程的队列尾,而若无其他线程在同优先级,则 yield
无效果。
[编辑]示例
运行此代码
#include <chrono>#include <iostream>#include <thread> // 建议其他线程运行一小段时间的“忙睡眠”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<<"等待 "<<std::chrono::duration_cast<std::chrono::microseconds>(elapsed).count()<<" 微秒\n";}
可能的输出:
等待 128 微秒
[编辑]参阅
thrd_yield 的 C 文档 |