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

C# 对等网络锁定模式(类似于互斥/信号量/监视器),c#,locking,C#,Locking,我想做以下工作: 我有很多电脑。 在每台计算机上运行一个程序。 没有集中式服务器 程序可以根据定义的条件进行选择,以提供另一台计算机指定的数据。执行此操作时,其他计算机不应执行相同操作。(一种双向同步) 让我们举个例子。(C1..Cn是在不同计算机上运行的程序) C1发送C2更新数据。当处理处于活动状态时,C2不应要求C1更新其他内容 这个想法是: C1向C2发送消息:PauseExecution() C1向C2发送待处理的项目(更新C2上的一些数据) C1向C2发送消息:ResumeExecu

我想做以下工作:

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

程序可以根据定义的条件进行选择,以提供另一台计算机指定的数据。执行此操作时,其他计算机不应执行相同操作。(一种双向同步)

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

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

这个想法是:

  • C1向C2发送消息:PauseExecution()
  • C1向C2发送待处理的项目(更新C2上的一些数据)
  • C1向C2发送消息:ResumeExecution()
  • C2向C1发送消息:PauseExecution()
  • C2向C1发送要处理的项目(更新C1上的一些数据)
  • C2向C1发送消息:ResumeExecution()
  • 但现在最大的问题出现了

    如果C1向C2发送消息以暂停,而C22同时向C1发送消息以暂停,则两者都将阻塞

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

    是否有另一种模式可以使用,这样n台计算机就不会阻塞

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


    或者这个问题还有其他解决方法吗?

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

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

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

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

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


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

    我认为这种情况下的问题在于(回复不OK)。如果两者同时在不同的机器上执行该方法,我认为两者都可能给出Not OK而不是OK。如果在他们之间传递一个令牌,那么可能会这样做,只有令牌的所有者才允许暂停。但问题是:如果带令牌的那个从网络中删除,会发生什么,等等。我也会接受一些建议,指出一些繁忙的等待方向。是的,这是有可能给双方都不确定。但在这种情况下,他们将尝试在不同的时间间隔后重新发送(这可能是基于客户端的id)。对不起,我的意思是:由于计时2次可能会出现OK,如果双方都独立地检查同一件事而不锁定object2 OK消息是不可能的;每个客户端有两种状态:发送或不发送。如果发送,则无法发送OK消息;如果不发送,则它将发送一条OK消息,并且不会尝试向其他客户端发送数据。对不起,如果我错过了一些要点…哦,我的意思是以下情况:两个现在都不发送。双方都试图发送,因此要求对方暂停。由于两者都未达到发送状态,因此都可以进入暂停并发送OK(因此永远等待)。但如果我想一想,也许你的意思是发送者直接进入发送,然后要求暂停?如果使用alock来相互排除PuaseExecution和StartSending(也可能会触发较大发送的连接超时),您可能会在Programmers.StackExchange.com上找到更好的受众。这种高级算法设计不适合实际问题。StackOverflow迎合了许多人的需要。@tragedian谢谢,Programs.StackExchange帮助了他们。