セマフォ 10/29

課題1

  1. sem_init, sem_wait, sem_post についてのオンラインマニュアルを読み、 セマフォの使い方を理解せよ。

  2. セマフォは単純な排他制御のためにも使える。 どのように sem_init, sem_wait, sem_post を使えば mutex による排他制御と 同じことができるか、具体的に説明せよ。(ノートまたはファイルに書け)

課題2

バッファサイズが n(固定)の Producer/Consumer problem を実演するプログラムを作成せよ。バッファはリングバッファとせよ。

  1. Producer は繰り返しデータを作成し、一つづつバッファに書き込む。 バッファが一杯の時には空きができるまで待つ。 バッファが一杯でないのに待ってはいけない。
  2. Consumer はバッファから一つづつデータを受け取る。 バッファが空の時はデータが書き込まれるまで待つ。 バッファが空でないのに待ってはいけない。
  3. Consumer は Producer が作成した順序でデータを受け取らなくてはならない。

Procuder が遅い場合、Consumer が遅い場合の両者についてテストをし、 データの洩れや重複がおこらないことを確認せよ。

提出課題

  1. 課題1の2. の説明
  2. 課題2のプログラム、テスト内容とその結果

来週はセマフォを自作する。 以下の課題3はそのための準備である。

また、セマフォの自作には C++ の クラスを使う。C++ を知らない人は自習しておくこと。

課題3(先週の課題4)

signal.cpp を読んで、 その実行結果を想像せよ。 この課題においては綿密な思考をしなくてよい。 むしろいろいろ自由に想像せよ。 実行してみて、処理の流れを理解せよ。

「シグナル」と「シグナル処理」は、「割り込み」と「割り込み処理」 に似ている。シグナルはプログラムが発行する割り込みとも言える。 これらをひっくるめて「イベント」、「イベント処理」などとも呼ぶ。