Se pueden implementar colas sin bloqueo para el caso de productor único / consumidor único, y a menudo puede diseñar su software para minimizar el número de colas de productor múltiple o consumidor múltiple.
Se puede construir una cola sin bloqueo de la siguiente manera: Asigne una matriz de los elementos que se van a comunicar, y también dos enteros, llámelos Head y Tail. Head es un índice en la matriz, donde se agregará el siguiente elemento. La cola es un índice en la matriz, donde el siguiente elemento está disponible para ser eliminado. La tarea del productor lee H y T para determinar si hay espacio para agregar un elemento; escribe el elemento en el índice H, luego actualiza H. Las tareas del consumidor leen H y T para determinar si hay datos disponibles, lee los datos del índice T, luego actualiza T. Básicamente es un búfer en anillo al que acceden dos tareas, y el El orden de las operaciones (insertar, luego actualizar H; eliminar, luego actualizar T) asegura que no se produzcan daños en los datos.
Si tiene una situación con múltiples productores y un solo consumidor, o un solo productor y múltiples consumidores, efectivamente tiene una limitación de recursos de algún tipo, y no tiene nada más que usar la sincronización, ya que es más probable que el limitador de rendimiento ser el único productor / consumidor que una sobrecarga del sistema operativo con el mecanismo de bloqueo.
Pero si tiene múltiples productores Y consumidores, vale la pena pasar el tiempo (en el espacio de diseño) para ver si no puede obtener un mecanismo de comunicación más coordinado; En un caso como este, serializar todo a través de una sola cola definitivamente hace que la eficiencia de la cola sea el determinante central del rendimiento.