Dead Lock
Menuさまざまな言語で書いたロックをテストするプログラムがある。
どれか一つの言語を選び、デッドロックする例と、それを避ける例を記述せよ。
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() を使うらしいです...