-title: Dead Lock
さまざまな言語で書いたロックをテストするプログラムがある。
どれか一つの言語を選び、デッドロックする例と、それを避ける例を記述せよ。
--CとPerl、Java
- flock_test.c
- flock_test.pl
これらを用いて、この授業のデッドロックを2相ロックで再現してみよ。ま
た、2相ロックでない場合に矛盾が生じる例を示せ。
(注) sleep などを使わないとうまくdead lock しないことがある。
二人でおなじようにアクセスするのではdead lockしない。
--flock_test.pl の使い方
echo 1 > plane_reserve; echo 1 > hotel_reserve
perl flock_test.pl & perl flock_test1.pl
こんな感じで実行する。
元のソースは2相ロックになってないので、まず、それを修正する。
ロックの順序を工夫してデッドロックさせる。
--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() を使うらしいです...