「cpp/thread/yield」の版間の差分
提供: cppreference.com
14行: | 14行: | ||
===ノート=== | ===ノート=== | ||
− | この関数の正確な動作は処理系に、特に使用中の OS のスケジューラの機構やシステムの状態に依存します。 例えば、先入れ先出しのリアルタイムスケジューラ (Linux の {{tt|SCHED_FIFO}}) | + | この関数の正確な動作は処理系に、特に使用中の OS のスケジューラの機構やシステムの状態に依存します。 例えば、先入れ先出しのリアルタイムスケジューラ (Linux の {{tt|SCHED_FIFO}}) (そしてもし、同じ優先度のスレッドが他になければ、 {{tt|yield}} は効果を持ちません)。 |
===例=== | ===例=== |
2018年4月3日 (火) 14:16時点における最新版
ヘッダ <thread> で定義
|
||
void yield() noexcept; |
(C++11以上) | |
他のスレッドが実行できるように、スレッドの実行を再スケジュールするためのヒントを処理系に提供します。
目次 |
[編集] 引数
(なし)
[編集] 戻り値
(なし)
[編集] ノート
この関数の正確な動作は処理系に、特に使用中の OS のスケジューラの機構やシステムの状態に依存します。 例えば、先入れ先出しのリアルタイムスケジューラ (Linux の SCHED_FIFO
) は、現在のスレッドをサスペンドし、同じ優先度の実行可能なスレッドのキューの末尾に置くでしょう (そしてもし、同じ優先度のスレッドが他になければ、 yield
は効果を持ちません)。
[編集] 例
Run this code
#include <iostream> #include <chrono> #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
[編集] 関連項目
thrd_yield の C言語リファレンス
|