-title: Dead Lock さまざまな言語で書いたロックをテストするプログラムがある。 どれか一つの言語を選び、デッドロックする例と、それを避ける例を記述せよ。 flock_test.pl などのソース --CとPerl、Java これらを用いて、この授業のデッドロックを2相ロックで再現してみよ。ま た、2相ロックでない場合に矛盾が生じる例を示せ。 (注) sleep などを使わないとうまくdead lock しないことがある。 二人でおなじようにアクセスするのではdead lockしない。 --flock_test.pl の使い方 echo 1 > plane.txt ; echo 1 > hotel.txt perl flock_test.pl Oc & perl flock_test.pl Atton こんな感じで実行する。 先に飛行機を予約する flock_test.pl と、先にホテルを予約する flock_test1.pl の両方を作っておく。 これを組み合わせるとバグが出やすい。sleep はバグが出るように入れてる。 --flock_test.pl のバグ 1 飛行機を取った時点でロックを解放してから、ホテルを取りに行くようにする。 (2相ロック ) この方法では、飛行機とホテルを片方しか取れない場合があることを示せ。 一人が先にホテルをとって、一人が先に飛行機をとる必要がある。  ソースとそのようになる実行例を示せ。 --flock_test.pl のバグ 2 飛行機のロックを解放をホテルをとってからにする。 デッドロックが起きることを示せ。 デッドロックが起きないように順序をそろえる。 perl flock_test.pl Oc & perl flock_test.pl Atton --Java Java のsyncrhonized method を用いて、2相ロックでのthread の dead lockが起きる可能性がある hg ssh://shongane.ie.u-ryukyu.ac.jp//home/hg/teacher/kono/os/ex/ThreadTest のdeadLockTestを jpf で動作させて、dead lock を捕まえよ。 deak lock が起きないようにプログラムを修正せよ。 正しいプログラムがdead lockしないことをJava PathFinderを用いて確認せよ。 --以下はオプションです。 --Scala 同様なことをScala で記述せよ --Erlang 同様なことをErlang で記述せよ --go 同様なことをgo で記述せよ runtime.cas() を使うらしいです...