Blu*_*Blu 3 concurrency multithreading synchronization mutex semaphore
该程序声称解决了makeWater()同步问题.但是,我无法理解.我是信号量的新手.如果你能帮助我理解这段代码,我会很高兴.
因此,您需要在多个同时运行的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).我想你明白了.请提出问题.:))
| 归档时间: |
|
| 查看次数: |
687 次 |
| 最近记录: |