問16 排他制御とセマフォ

応用情報​技術者試験 令和7年度 秋期 午前、全80問のうちの問16。

出典:令和7年度 秋期 応用情報技術者試験 午前 問16

一つの I²C バスに接続された二つのセンサーがある。それぞれのセンサー値を読み込む二つのタスクを排他的に制御したい。利用するリアルタイム OS の機能として,適切なものはどれか。

  1. アキュー
  2. イセマフォ
  3. ウマルチスレッド
  4. エメモリプール
答えと解説を開く

正解はイです。

2 つのセンサーは 1 本の I²C バスを共有しているので、2 つのタスクが同時にバスを使うと通信が混ざってしまいます。1 つのタスクが使っている間はもう 1 つを待たせる、これが排他制御です。セマフォは、資源を使えるかどうかを数で管理し、使う前に数を減らし、使い終わったら戻す仕組みです。数が 0 のとき、ほかのタスクは待たされます。排他制御に使う機能はセマフォのイです。

ほかの選択肢が違う理由

  • アキューは、タスクの間でデータを順番に受け渡すための機能です。共有の資源を順番に使わせる仕組みではありません。
  • ウマルチスレッドは、1 つのプログラムの中で複数の処理を並行して動かすことです。並行に動かすと、かえって排他制御が必要になります。
  • エメモリプールは、決まった大きさのメモリの区画を前もって用意しておき、素早く貸し出す仕組みです。バスの取り合いを防ぐ機能ではありません。

仕組み

排他制御が無いと、2 つの処理が同じ資源を同時に触って、中身が壊れたり通信が混ざったりします。トイレの鍵のように「使用中」を示す印を置き、空くまで待つのが基本の形です。

使える数を 1 にしたセマフォは、ミューテックスとほぼ同じ働きをします。セマフォは数を 2 以上にすれば、同時に使える数に上限を設ける用途にも使えます。

この問に出る言葉