点对点网络锁定模式(类似于互斥/信号量/监视器)

时间:2013-01-11 10:17:39

标签: c# locking

我想做以下事情:

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

程序可以根据定义的标准选择给另一台计算机指定的数据。这样做时,另一台计算机不应该这样做。 (一种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()。
  7. 但现在出现了最大的问题。

    如果C1发送消息给C2暂停,并且C22在同一个tiem发送消息给C1暂停,两者都会阻塞。

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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