2011-12-10 63 views
1

http://en.wikipedia.org/wiki/Lamport%27s_bakery_algorithm麪包算法(死鎖?)

我有一些問題要理解這個算法。如果當前線程和線程,我正在查看for循環中的那一刻是什麼情況會發生什麼?

主題:0,1,2

線程1取票1.線程2取票2.線程0什麼都不做。

陣列= I:0,1,2

第1輪:

  • 線程1(J = 0):數組[0] = 0。接着。
  • 線程2(J = 0):數組[0] = 0。接着。

第2輪:

  • 線程1(J = 1):數組[1] = 1(1,1)>(1,1)
  • 線程2(J = 1 ):(1,1)>(2,2)

(1,1)>(1,1)錯誤。 012,(1,1)>(2,2)錯誤。

這兩個線程都在等待...

怎麼了?這是一個僵局嗎?

+1

這是什麼意思:?(1,1)>(1,1) –

+0

(A,b)< (C,d)...(A user1091344

回答

2

算法中的while循環允許線程在不等式不是成立時進入臨界區。它說:(!號[J] = 0)。等待太長的時間作爲條件& &((號碼[J],J)<(編號[I],i)爲真

由於(1,1 )不大於(1,1)線程1可以傳遞迴路和進入臨界區

+0

我知道了,但我還發現另一種算法以「等待((數[J] = 0)或(號[J],J)>(編號[I],I))」,而不是while循環這裏是它同我可以同時理解,但不與本AWAIT – user1091344

+0

娟:我覺得它應該等待((number [j] = 0)或(number [j],j)> =(number [i],i)),否則就會死像你說的那樣鎖定。 – sdcvvc

+1

涓:i = j時,當然數[J]/= 0,因爲它是在開始時被初始化,以及(數[J],j)的==(數[I],i)中,並且這些數字可以不影響通過任何線程,所以第i個線程將被卡住。所以這個版本是不正確的。 – sdcvvc