答案 0 :(得分:6)
因此,您需要在多个同时运行的H线程和O线程中生成H2O(2Hs和一个O)组合。
事情是'O'需要两个'H'。两种不同的水分子之间没有任何形状。
因此假设O和H线程的数量开始其进程。
P(o_wait)
,因为o-wait被锁定,应该等待。 P(mutex)
(现在互斥= 0和计数= 1)并且将进入if(count%2 == 1)
,然后进入向上计数'互斥'(现在是互斥= 1)并在P(h_wait)
中阻止。 (此计数实际上是指H计数)P(mutex)
(现在互斥= 0和计数= 2)。但现在计数是偶数 - >因此它进入else
。然后它将V(o_wait)
(现在o_wait = 1)并卡在P(h_wait)
。if
块内的前一个位置。但是因为o_wait被计数为1,所以幸运的O线程(O *)可以继续其进程。它将执行两个V(h_wait)
s(现在o_wait = 0,h_wait = 2),以便之前的2个H线程可以继续(没有任何其他线程,现在是h_wait = 0)。所以所有3(2 H和O)都可以完成它的过程,而H * -2正在计算'互斥'(现在互斥= 1)。我想你明白了。请提出问题。 :))