リアルタイムオペレーティングシステム
ロックされている場合、タスクはそのセマフォを待つためのキューに登録される。一般にタスクはセマフォの待ち時間のタイムアウト値を設定できる。セマフォに関する問題として、優先順位の逆転やデッドロックがよく知られている。
「優先順位の逆転」では、高優先度タスクが低優先度タスクの持つセマフォを待つため、低優先度のタスクが先に処理される。一般的な解決策としては優先度継承や優先度上限プロトコルがある。「デッドロック」は複数のセマフォを獲得しようとする複数のタスクが存在する場合に発生する。デッドロックはセマフォの獲得順を厳密に設計することで回避するのが一般的である。ただし、同種のリソースを2個同時に獲得しなければならない場合、それぞれのセマフォの獲得順を厳密に決定することは困難である。その場合、例えばセマフォを獲得できないときにビジーウェイトもブロックもしないでエラーを返すプリミティブを用意するなどの方式がある。
タスク間のリソース共有の別の方法として「メッセージ渡し」がある。この場合、あるリソースは直接的には特定の1つのタスクのみが管理し、他のタスクがそのリソースにアクセスしたい場合は、管理タスクにメッセージを送信する。この方式でも優先順位の逆転やデッドロックは発生する可能性がある。しかし、システムが単純であればデッドロックが発生しないように設計可能であるため、性能的にはセマフォよりも不利だが、動作を予測し易い。