0

我想做以下事情:

我有好几台电脑。在每台计算机上都会运行一个程序。没有集中式服务器。

该程序可以通过定义的标准选择给另一台计算机指定的数据。这样做时,另一台计算机不应该这样做。(一种2路同步)

让我们举个例子。(C1 .. Cn 是在不同计算机上运行的程序)

C1 发送 C2 更新的数据。当处理处于活动状态时,C2 不应要求 C1 更新其他内容。

当时的想法是:

  1. C1 向 C2 发送消息:PauseExecution()
  2. C1 向 C2 发送要处理的项目(更新 C2 上的一些数据)
  3. C1 向 C2 发送消息:ResumeExecution()。
  4. C2 向 C1 发送消息:PauseExecution()
  5. C2 向 C1 发送要处理的项目(更新 C1 上的一些数据)
  6. C2 向 C1 发送消息:ResumeExecution()。

但是现在最大的问题来了。

如果 C1 向 C2 发送消息以暂停,并且 C22 同时向 C1 发送消息以暂停,则两者都会阻塞。

没有用于保持信号量的集中式服务器/共享内存。

是否有另一种可以使用的模式,以便 n 台计算机不会阻塞?

所以这个问题是关于算法排除的。

或者这个问题还有另一种解决方法吗?

4

1 回答 1

1

为什么不向请求发送回复消息并在不同的时间间隔重新运行请求;

C1 向 C2 发送消息:PauseExecution()(回复:Not OK)

C2 向 C1 发送消息:PauseExecution()(回复:Not OK)

C1收到回复消息(等待随机时间再发送另一条消息)

C2收到回复消息(在发送另一条消息之前等待随机时间)

C1向C2发送消息:PauseExecution()(回复:OK)

于 2013-01-11T10:25:19.357 回答