std::this_thread::yield

来自cppreference.com
< cpp‎ | thread
 
 
并发支持库
线程
(C++11)
(C++20)
this_thread 命名空间
(C++11)
yield
(C++11)
(C++11)
协作式取消
互斥
通用锁管理
(C++11)
(C++11)
(C++11)
(C++11)
条件变量
(C++11)
信号量
闩与屏障
(C++20)
(C++20)
未来体
(C++11)
(C++11)
(C++11)
安全回收
风险指针
原子类型
(C++11)
(C++20)
原子类型的初始化
(C++11)(C++20 弃用)
(C++11)(C++20 弃用)
内存定序
(C++11)(C++26 弃用)
原子操作的自由函数
原子标志的自由函数
 
在标头 <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 文档
close