当前位置:  开发笔记 > 编程语言 > 正文

请打破这种同步算法

如何解决《请打破这种同步算法》经验,为你挑选了1个好方法。

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

任何人都可以看到流量吗?除了可能是其中一个进程可能通过快速重新进入该部分而使另一个进程挨饿?



1> Michael Mads..:

如果"如果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的等待时间彼此不同.

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有