Altifigence Academy

19 / 24 · Concept

Maintenir le bilan des transactions lors de la purge et de la réinitialisation

Distinguez annulation et livraison et alignez l’état valid sur les files attendues.

L’annulation est un événement de conception explicite

Reset ramène la commande à un état connu ; flush annule le travail en cours défini. Effacer seulement les données ne suffit pas. Si valid reste haut, zéro peut devenir une fausse transaction. D’anciens bits de données avec valid à zéro sont inoffensifs. Effacez l’état de possession approprié : full dans un tampon à un emplacement, count et pointeurs dans une FIFO, ou l’état de machine et la validité du résultat.

Notre contrat synchrone à horloge unique exclut l’acceptation et la livraison au front de reset aux deux extrémités et y annule tout travail en cours. Réinitialiser une seule extrémité tandis que l’autre compte un ancien valid comme livraison viole cet accord. Documentez la portée du reset et la politique de disponibilité. Les nouvelles entrées après reset appartiennent à un nouvel intervalle de transactions.

Événementacceptéeslivréesannuléesen cours
Accepter A, B, C3003
Livrer A3102
Purger B, C3120
Accepter D4121
Livrer D4220

Avec annulation, utilisez accepted-delivered-canceled=outstanding. Annulez chaque transaction non livrée exactement une fois. La file de référence doit aussi retirer le travail annulé tout en vérifiant qu’aucun ancien résultat n’entre dans le nouvel intervalle.

Une requête mémoire externe peut survivre à une purge interne. Distinguez les réponses tardives par un identifiant de génération ou attendez la fin des anciennes requêtes avant de redémarrer. Réutiliser trop tôt un petit champ de génération peut confondre une ancienne réponse avec une réponse courante. Notre projet final n’a aucune réponse externe retardée et n’annule que les tampons internes.

Une purge sélective peut conserver le travail antérieur à un branchement tout en supprimant les opérations plus récentes du mauvais chemin. Cela exige des règles définies d’ordre et de validation définitive. Le travail invalide ne doit ni mettre à jour le stockage ni participer à l’acheminement direct. Testez reset à vide, bloqué, plein et pendant des transferts simultanés potentiels. Un reset au démarrage seul ne teste pas l’annulation du travail en cours.

Essayez vous-même

Acceptez cinq transactions, livrez-en deux, puis purgez les trois restantes. Acceptez-en ensuite deux et livrez-en une. Trouvez les cumuls acceptées, livrées, annulées et en cours.

Lire l’explication

Acceptées=7, livrées=3, annulées=3, en cours=1. Le bilan est 7-3-3=1. Les éléments annulés ne sont pas des livraisons réussies.

Votre choix s’applique à ce navigateur. Modifiez-le à tout moment en bas de page.