Hai davvero bisogno di verificare che A sappia che B sa che A sa che B sa che A sa che B sa che A ha cambiato il valore di X?
B ha bisogno di sapere che A ha cambiato il valore di X. Questo è ovvio.
A deve sapere che B sa che A ha cambiato il valore di X, perché se B non ha ricevuto il messaggio A ha bisogno di rinviarlo. Questo non può essere evitato a meno che non si presuma che l'intera pipa di messaggistica sia perfetta e non possa perdere i messaggi.
Ma B deve sapere che A sa che B sa che A ha cambiato il valore di X? Si può dire che B ha bisogno di sapere quando interrompere l'invio di ACK, ma è davvero necessario? Io dico di no! Qui è dove si ferma la catena ACK!
B non ha bisogno di verificare che A abbia ottenuto l'ACK. Se A non ha ottenuto l'ACK, assumerà semplicemente che B non ha ricevuto il messaggio originale e lo invia di nuovo. B riceverà il messaggio resent e lo riconoscerà già ricevuto e non farà nulla o - se non è stato implementato il riconoscimento di tale duplicazione dei messaggi - sarà sufficiente impostare nuovamente il valore di X. Nessun danno fatto. In ogni caso, B invierà un ACK sul messaggio inviato nuovamente.
A è responsabile di assicurarsi che B ottenga il nuovo valore di X. A ha bisogno di inviare nuovamente il messaggio di nuovo e di nuovo - ma B ha solo bisogno di inviare un ACK per ogni messaggio di A.