无限确认循环

Posted

技术标签:

【中文标题】无限确认循环【英文标题】:Infinity confirmation loop 【发布时间】:2012-12-04 15:22:00 【问题描述】:

我遇到了一个有趣的理论问题:

假设我们通过一些 IPC(如 tcp 套接字或命名管道)连接了程序 A 和程序 B。程序 A 向程序 B 发送一些数据,并根据数据传递的成功,A 和 B 执行一些操作。但是,只有在确定 A 已收到交货确认时,B 才应进行操作。所以我们想出了3个连接: A -> B [数据传输] B -> A [发货确认] A -> B [收到交货确认的确认]

这可能看起来很奇怪,但目标是在双方都知道数据已传输之前,不对 A 和 B 执行任何操作。

这就是问题所在,因为第二次连接是为了确认第一次连接成功。第三个是确认第二个,但实际上并不能保证连接 2 和 3 不会失败,在这种情况下,我们会陷入确认的无限循环。是否有一些 CS 理论可以解决这个问题?

【问题讨论】:

很简单:如果A在某个时间段内没有得到确认,则认为数据丢失,然后重新传输。没有循环,因为 A 将终止原始传输序列并开始一个新的传输序列。然后在某个时候,你终止重传,假设 B 是无可救药地无法到达,你只是爬回床上呜咽。 CS理论是TIMEOUT。 像非接触式电子支付卡... 这不是关于无响应,而是关于了解相互状态而不会有另一个连接失败的风险,所以不,这里不适合超时 【参考方案1】:

如果我没看错你的问题,这个问题就是“the two general's problem”。问题的要点是,最后一个发送消息或确认的实体对它刚刚发送的内容的状态一无所知,依此类推。

【讨论】:

以上是关于无限确认循环的主要内容,如果未能解决你的问题,请参考以下文章

C++入门基础知识[3]——循环嵌套循环无限循环

如何可视化vue无限更新循环的无限循环

检查空无限循环中的选项与做一些无限循环

无限循环小数化分数

为啥以 char 作为索引的循环会无限循环?

00014_无限循环