Dead Lock

Menu

さまざまな言語で書いたロックをテストするプログラムがある。

どれか一つの言語を選び、デッドロックする例と、それを避ける例を記述せよ。

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() を使うらしいです...

Shinji KONO / Tue Jan 13 14:05:33 2015