Derzeit im Test: Der GitHub-Code wird nach Abschluss veröffentlicht.

A · Vergeben

Strukturrefresh

Die Erfolgsantwort auf eine Acquire-Anforderung (A). token ist ein Fencing-Token (u64, big-endian), das bei jeder Vergabe steigt; owner ist der Wert aus der Anfrage, unverändert zurückgespiegelt — ein Korrelator, um eindeutig zu bestimmen, zu welchem Acquire-Versuch diese Antwort gehört (Regeln zur Antwortzuordnung).

Nach dem op folgt ein fester 16-Byte-Header. Da diese 16 Bytes binär sind, können sie 0x0A (\n) enthalten — der Client muss sie daher zuerst anhand der Bytezahl lesen und erst danach nach dem Zeilenumbruch suchen.

Byte-Notation: op ist ein ASCII-Zeichen, token und owner sind binär (u64, big-endian), und key ist UTF-8-Text (variable Länge, in der Struktur als N dargestellt). Das abschließende \n ist 0A.

Ablauf

Client
Server
A · acquire (key · owner)
Schlüssel nicht gehalten → sofort vergeben
A · vergeben (token = n · owner gespiegelt)
gehalten → wartet in der Warteschlange, bis Inhaber freigibt oder abläuft
an der Reihe → A · vergeben (token = n+1)
AnfrageAntwort

Es gibt zwei Wege zur Vergabe, aber der Frame ist in beiden Fällen derselbe — ob sofort vergeben oder nach Wartezeit, das eintreffende A trägt ein frisches Fencing-Token für diesen Moment, und das Token steigt nur immer weiter. Wird wait während des Wartens überschritten, kommt stattdessen Zeitüberschreitung T.