在2-generals问题和TCP作为一个整体的背景下,我一直想知道在下列情况下,执行以下通信步骤是否有任何优势。
考虑ATM与其银行通信以从客户账户中扣除50美元的情况,情况如下:
情况1:
ATM - 银行
扣除50美元 - >
< - 扣除50美元
ATM将随后释放资金
情况2:
ATM - 银行
我想扣除50美元 - >
< - 好的,如果你愿意,你可以要求我扣除50美元
扣除50美元 - >
< - 扣除50美元
ATM将随后释放资金
在以下情况下有任何优势吗?可以证明第一个通信步骤是完全没必要的吗?或者在第二种情况下是否存在一些开箱即用的优势?
提前致谢
答案 0 :(得分:0)
你可能知道,两个将军的问题是无法解决的。总有一种方法可以以不同意见的方式丢弃消息。
在您的示例中,第一步是不必要的,因为它永远不会影响任何一方从交易所抽取有关交易的结论。这不是一个正式的证据,我不知道如何制作一个。
也就是说,在一个真正的银行系统中,ATM会记录它所做的事情,以后它会在中途通信失败的情况下与服务器同步。可以进行双重提款(这在现实世界中已经发生 - 银行开发商知道他们无法避免这个问题)但帐户余额将在以后修正。