4.2. スレッドの同期
sched_yield
コマンドは、優先度の低いスレッドに実行の機会を与える同期メカニズムです。このタイプの要求は、適切に作成されていないアプリケーション内から発行すると失敗する可能性があります。
優先度が高いスレッドは sched_yield()
を呼び出して、他のスレッドに実行の機会を与えることができます。呼び出しプロセスは、その優先度で実行されているプロセスのキューの末尾に移動します。これは、同じ優先度で他のプロセスが実行していない状況で発生すると、呼び出しプロセスの実行は継続されます。プロセスの優先度が高い場合は、ビジーループが発生し、マシンが使用できなくなる可能性があります。
SCHED_DEADLINE
タスクが sched_yield()
を呼び出すと、設定された CPU が放棄され、残りのランタイムには次の期間まで直ちにスロットリングが適用されます。sched_yield()
の動作により、タスクは次の期間の開始時に起動できます。
スケジューラーは、実際に実行する他のスレッドがあるかどうかを判別できます。リアルタイムタスクで sched_yield()
は使用しないでください。
手順
sched_yield()
関数を呼び出すには、以下のコードを実行します。for(;;) { do_the_computation(); /* * Notify the scheduler the end of the computation * This syscall will block until the next replenishment */ sched_yield(); }
SCHED_DEADLINE
タスクには、次の期間 (次のループ実行を開始する) まで、競合ベースの検索 (CBS) アルゴリズムによってスロットリングが適用されます。
関連情報
-
pthread.h(P)
の man ページ -
sched_yield(2)
の man ページ -
sched_yield(3p)
の man ページ