Actualmente en pruebas: el código de GitHub se abrirá al finalizar.

A · Adquirido

Estructurarefresh

La respuesta de éxito a una solicitud de adquisición (A). token es un token de fencing (u64, big-endian) que aumenta con cada concesión, y owner es el valor enviado en la solicitud, devuelto sin cambios: el correlador que permite identificar con precisión de qué intento de adquisición es esta la respuesta (Reglas de emparejamiento de respuestas).

Tras el op viene una cabecera fija de 16 bytes. Como esos 16 bytes son binarios, pueden contener 0x0A (\n), así que el cliente debe leerlos primero según su número de bytes y solo después buscar el salto de línea.

Notación de bytes: op es un carácter ASCII, token y owner son binarios (u64, big-endian), y key es texto UTF-8 (longitud variable, mostrado como N en la estructura). El \n final es 0A.

Flujo

Cliente
Servidor
A · adquirir (key · owner)
clave libre → se emite de inmediato
A · adquirido (token = n · owner reflejado)
ocupada → espera en la cola a que el poseedor libere o expire
llega el turno → A · adquirido (token = n+1)
solicitudrespuesta

Hay dos caminos para obtener la concesión, pero la trama es la misma en ambos casos — ya se emita de inmediato o tras esperar, el A que llega contiene un token de fencing nuevo en ese momento, y el token solo aumenta. Si se supera wait mientras se espera, llega Tiempo agotado T en lugar de esta respuesta.