• ベストアンサー

イベントフラグを複数のタスクで待った時の優先順位

μiTRONのイベントフラグ待ちで、 1つのイベントフラグを複数のタスクで同時に待っていた場合に 一番最初に動くタスクは、優先順位順でしょうか? それとも、先に待機した順でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • R32C
  • ベストアンサー率39% (115/290)
回答No.1

uITRON4.0であれば、タスク優先度順かFIFO順(先に 待機した順)を選ぶことができます。選び方は、イベント フラグの生成(CRE_FLGまたはcre_flg等)時に指定します。 uITRON3.0を含め、それ以前のuITRONでは優先度順は仕様 になかったと思いますが、実装独自に拡張されている場合 もあります。ですので、そのuITRONの仕様(uITRONの仕様と 違う部分がかかれた仕様書)を確認されるとよいと思います。 ただし、クリア属性を指定しない場合には、 カーネル過渡状態では、確かに優先度順で、 タスクはwait状態からready状態に遷移しますが、 タスクスケジューラが、優先度の高いタスクを ディスパッチするため実質的には、優先度順 になるはずです。 もう少し解説しますと、 クリア属性を指定する場合は、先頭のタスクのみが waitを解除しますが、クリア属性の指定がない場合は、 flagの成立するすべてのタスクがwaitを解除します。 したがって、解除されるタスクを含め優先度の高い タスクが次にディスパッチされます。 さらに、同一優先順位のタスクについてどちらが先に ディスパッチされるかについては、uITRONの仕様には 不定である旨記載されているので、どちらが先に ディスパッチされる かは、実装依存かと思われます。

参考URL:
http://pc8.2ch.net/test/read.cgi/os/1077188504/276n-
mtsed
質問者

お礼

ありがとうございました。 確かにご回答のとおりで、uITRON4.0ではTA_TFIFO/TA_TPRIの指定ができるようですね。 今使っているOSは3.0でタスク優先順位である旨の記載がありました。

関連するQ&A