std::this_thread::yield
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <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言語リファレンス
|