セマフォの実装とセマフォを使ったサンプル 0. おことわり 自分のために書いた覚え書きのため、情報に不足があるかもしれませんが、 あらかじめご了承下さい。 1. 目的 日経BP社「トランザクション処理 概念と技法」(著ジム・グレイ他)に掲載されていた セマフォの実装サンプルを参考に、Javaでセマフォを実装した。 そしてセマフォの動作を確認するためにサンプルを作成した。 2. ファイルの内容 ソースファイルとクラスファイルが入っている。 3. サンプルの概要 3.1 ストーリー? ホワイトボードの前に算数を勉強中の生徒が何人かいる。 今日は先生がいないため、生徒が自分でホワイトボードに問題と答えを書いたり、 他の生徒がホワイトボードの内容を読んだりしている。 ホワイトボードには共有セマフォがついており、 セマフォの使い方により、生徒は以下のような3種類に分類できる。 (1) セマフォを気にせず、自由に読み書きする困った生徒 (2) 排他モードでセマフォを取得してから読み書きする慎重な生徒 (3) 同時に複数の生徒が読む事が出来るように、読むときは共有モード、 書くときは排他モードでセマフォを取得する要領の良い生徒 3.2 起動方法(例) java -cp sample02.jar nat.locking.sample.whiteboard.WhiteBoardSample 3.3 操作 ホワイトボードを表すウィンドウのボタンで生徒を追加します。 生徒を表すウィンドウのボタンで、ホワイトボードの内容を 「読む」動作や「書く」動作をします。 ラジオボタンで、セマフォの使い方を切り替えることができます。 セマフォを使わずに「読む」「書く」動作をさせると、他の生徒が書いている途中の 内容を読んでしまったり、他の生徒が書き終わる前に上書きしたりします。 4. 参考情報 このプログラムは、以下の日記にリンクしています。 http://www9.plala.or.jp/NAT/diary/2004-06-16.html http://www9.plala.or.jp/NAT/diary/2004-06-20.html 5. 配布条件など このプログラムは自由に配布、改変して構いませんが、 その結果については一切保障しません。自己責任で利用して下さい。 特に、ここで作成したセマフォはどのような状況でも正しいセマフォとして 動く事は保障できません。 何回か動かして、正しく動いていることは確認していますが、 全てのロック取得や解放のタイミングをテストしたわけではありません。 もし、こういうタイミングだと動かない、というケースを発見した方が おりましたら、ぜひ教えて下さい。 6. 作成者 NAT http://www9.plala.or.jp/NAT/ 2004/06/16 Ver 0.1 単純なセマフォを実装 2004/06/20 Ver 0.2 共有ロックが可能な共有セマフォを実装