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 文檔
|