XINU
|
セマフォカウントをリセットし、待機中のプロセスを全て解放する。 More...
#include <xinu.h>
Go to the source code of this file.
Functions | |
syscall | semreset (sid32 sem, int32 count) |
セマフォカウントをリセットし、待機中のプロセスを全て解放する。 More... | |
セマフォカウントをリセットし、待機中のプロセスを全て解放する。
Definition in file semreset.c.
セマフォカウントをリセットし、待機中のプロセスを全て解放する。
Step1. 割り込みを禁止する。
Step2. 以下のいずれかを満たす場合、割り込みを許可状態に復元し、処理を終了する。
・引数で渡されたセマフォカウンタのリセット値が負の値の場合
・引数で渡されたセマフォIDが不整値の場合
・セマフォがFREE状態の場合
Step3. 待機状態プロセスを全てREADY状態に移行するまで、再スケジューリングを遅延(Defer)させる。
Step4. キュー操作API(getfirst())でキューの先頭から順番にプロセスIDを取り出し、READY状態にする。
Step5. 再スケジューリングの遅延を解除する。
Step6. 割り込みを許可状態に戻す。
[in] | sem | リセット対象のセマフォID |
[in] | count | 新しいセマフォカウント(0以上の値) |
Definition at line 25 of file semreset.c.
References DEFER_START, DEFER_STOP, disable(), EMPTY, getfirst(), isbadsem, OK, ready(), resched_cntl(), restore(), S_FREE, sentry::scount, semtab, sentry::squeue, sentry::sstate, and SYSERR.
Referenced by _ptclear(), and rdswrite().