面包店算法(死锁?)

时间:2011-12-10 15:34:27

标签: multithreading algorithm for-loop deadlock

http://en.wikipedia.org/wiki/Lamport%27s_bakery_algorithm

我有一些问题需要理解这个算法。如果当前线程和线程,我在for循环中看到的那一刻是相同的,会发生什么?

主题:0,1,2

线程1获取票证1.线程2获取票证2.线程0不执行任何操作。

Array = 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.(1,1)> (2,2)

(1,1)> (1,1)错了。 (1,1)> (2,2)错了。

两个线程都在等待......

怎么了?这是一个僵局吗?

1 个答案:

答案 0 :(得分:2)

当不等式保持时,算法中的while循环允许线程进入临界区。它说:等待条件(Number [j]!= 0)&& ((Number [j],j)<(Number [i],i)为真。

由于(1,1)不大于(1,1),线程1可以通过循环并进入临界区。