Actuellement en test : le code GitHub sera ouvert une fois terminé.

A · Acquis

Structurerefresh

La réponse de succès à une requête d'acquisition (A). token est un jeton de fencing (u64, big-endian) qui augmente à chaque octroi, et owner est la valeur envoyée dans la requête, renvoyée telle quelle : le corrélateur qui permet d'identifier précisément de quelle tentative d'acquisition ceci est la réponse (Règles de correspondance des réponses).

Après l'op vient un en-tête fixe de 16 octets. Ces 16 octets étant binaires, ils peuvent contenir 0x0A (\n) : le client doit donc les lire selon leur nombre d'octets d'abord, et seulement ensuite chercher le retour à la ligne.

Notation des octets : op est un caractère ASCII, token et owner sont binaires (u64, big-endian), et key est du texte UTF-8 (longueur variable, notée N dans la structure). Le \n final est 0A.

Flux

Client
Serveur
A · acquisition (key · owner)
clé non détenue → émise immédiatement
A · acquis (token = n · owner en écho)
détenue → attend dans la file que le détenteur libère ou expire
le tour arrive → A · acquis (token = n+1)
requêteréponse

Il existe deux chemins pour être octroyé, mais la trame est identique dans les deux cas — qu'il soit émis immédiatement ou après une attente, le A qui arrive porte un jeton de fencing frais à cet instant, et le jeton ne fait qu'augmenter. Si wait est dépassé pendant l'attente, Timeout T arrive à la place de cette réponse.