2017-04-03 11 views
1

プリエンプションを使用してデッドロックを回避するプロセスを理解していますが、コードに入れるのは苦労しています。デッドロックを回避するためのプリエンプション

であるY スレッドT1、T2リソースW、X、使用してデッドロックを回避するためにプリエンプションの私の理解:

thread t1 -> has resource X. request resource W

thread t2 -> has resources W, Y. request resource X

t1 checks if resource W is free. if it's not free, don't acquire resource X or release it.

t2 executes. Releases resources W, Y, X

t1 executes

どのように私はCで、上記のようなものを実装については行くべき++?どんな助けもありがとうございます。

答えて

2

一つの方法は、(7.4.4 hereを見て)リソースを番号付けてある。そして、

w = 1 
y = 2 
x = 3 

単純なルール:スレッドが唯一の昇順にリソースを取得することができます。

つまり、リソースRjを要求するために、プロセスはまずi> = jとなるすべてのRiを解放する必要があります。

スレッドt1 - >リソースがX(値は3)です。 >リソースWを(値は1)、Y(値は2である)を有する - 要求リソースW ==>がX最初

スレッドt2を解放する必要がある(値は1)。リクエストリソースX(値は3)==>t1がリリースされた直後に取得します

関連する問題