# OS_YieldThread

## 構文

      #include <nitro/os.h>

      void OS_YieldThread( void );

## 引数

なし。

## 返り値

なし。

## 説明

スレッドのリスケジューリングを行ないます。

カレントスレッドと同じ優先度を持つスレッドに実行機会を与えるため、現在のスレッドは CPU を譲渡しようとします。

通常は、カレントスレッドよりも高い優先度のスレッドが実行可能状態にあるのなら、それは既に実行されているはずですので、カレントスレッドと同じ優先度の実行可能状態のスレッドがない場合、この関数を呼んでも結果的に何もしないことになります。 ( ただし、スケジューリングを禁止にしてスレッド操作を行ったりすると、カレントスレッドより高い優先度のスレッドが実行可能状態になっているにも関わらず実行されていない、という状況が発生する場合があります。 )

内部動作的には以下の通りです。スレッドはリストで管理されており、優先度の高いものから低いものの順にソートされています。(リスト先頭がもっとも優先度が高い。)　実行可能状態になっているスレッドが複数あった場合には、よりリスト先頭に近いものが選択されるルールとなっていますが、これだと同じ優先度のものが複数あっても、リストの順序に依存して、先頭に近いものが常に選ばれることになります。この `OS_YieldThread()` は、カレントスレッドと同じ優先度で実行可能なスレッドが複数あった場合に、カレントスレッドをリスト内の(同じ優先度内で)後ろに追いやり、別のスレッドが前になるようにすることで他のスレッドへ実行機会を与えています。このスレッドの順序入れ替えを行なった後に、`OS_RescheduleThread()` を実行しています。

## 参照

`OS_InitThread, OS_EnableScheduler, OS_DisableScheduler, OS_RescheduleThread`

## 履歴

2005/06/20 初版