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
|