P1和P2是集群中的进程或节点.f1和f2是他们的旗帜.假设强大的内存模型,并且两个进程可以在任何时刻重新启动,并且重新启动进程会清除它的标志,这是我提出的算法,但是还没有打破,但这让我感到困扰,因为它没有在理论上得到证实和与彼得森相比看起来太简单了.
P1 start: set f1 if f2 set then clear f1, wait some, goto start else enter critical section do whatever clear f1 P2 start: set f2 if f1 set then clear f2, wait some, goto start else enter critical section do whatever clear f2
任何人都可以看到流量吗?除了可能是其中一个进程可能通过快速重新进入该部分而使另一个进程挨饿?
如果"如果X设置然后清除Y"操作不是原子操作,则存在可能阻止进入临界区的潜在竞争条件.我试图概述下面的流程:
P1: set f1 P2: set f2 P1: is f2 set? P2: is f1 set? P1: yes, clear f1 P2: yes, clear f2 P1: start wait P2: start wait P1: end wait P2: end wait P1: goto start P2: goto start
这可能会永远持续下去,直到任务调度程序完成的分配不同,或者两个P的等待时间彼此不同.