Este artículo describe el diseño y la implementación de una cola de acceso concurrente pensada para comunicar múltiples productores con múltiples consumidores (MPMC, por sus siglas en inglés) en memoria compartida. El autor parte de su interés por las estructuras de datos sin bloqueos y propone una solución basada en un sistema de tickets similar al de los ticket locks, adaptada para ejecutarse sin mutex.
La cola utiliza dos contadores atómicos, uno para productores y otro para consumidores, junto con dos arrays circulares de tamaño fijo y potencia de dos. Uno de los arrays almacena los datos; el otro guarda el estado de cada ranura, codificando en 63 bits el número de reserva y en el bit más significativo si el turno corresponde al productor o al consumidor. Para evitar operaciones de división, el tamaño del búfer se restringe a potencias de dos, lo que permite calcular el índice de la caja mediante una máscara de bits.
En la práctica, un productor que desea encolar un elemento incrementa el contador de productores con un fetch_add y obtiene su número de reserva; después, espera hasta que la entrada del búfer de estado coincida con ese número y tenga marcado el turno del productor, escribe el dato y conmuta el bit de estado para ceder el turno al consumidor. El consumidor realiza el proceso inverso: incrementa su contador, espera su turno, lee el dato y actualiza el estado con el número de reserva más el tamaño del búfer, señalando que la ranura vuelve a estar disponible para un productor.
El autor aclara que no se trata de una estructura wait-free en sentido estricto —la suspensión de un hilo puede afectar a otros—, sino de una implementación con espera acotada. La comparativa se realiza con otras colas populares del repositorio atomic_queue, mostrando un rendimiento competitivo. Es una pieza experimental que busca servir de referencia para programadores interesados en concurrencia de bajo nivel en Rust.
