Se pueden implementar colas sin bloqueo para el caso de un solo productor / un solo consumidor, y con frecuencia usted puede diseñar su software para minimizar el número de colas de múltiples productores o múltiples consumidores.
Una cola sin bloqueo puede construirse así: Asigne una matriz de los elementos 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. Tail 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 lee H y T para determinar si hay datos disponibles, lee los datos del índice T, luego actualiza T. Básicamente es un búfer de anillo al que se accede mediante dos tareas, y orden de operaciones (insertar, luego actualizar H; eliminar, luego actualizar T) garantiza que no se produzcan daños en los datos.
Si tiene una situación con varios productores y un solo consumidor, o con un solo productor y varios consumidores, efectivamente tiene una limitación de recursos de algún tipo, y no hay nada más que utilizar la sincronización, ya que el limitador de rendimiento es más probabilidades de ser el único productor / consumidor que una sobrecarga del sistema operativo con el mecanismo de bloqueo.
Pero si tiene varios 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, la serialización de todo a través de una sola cola definitivamente hace que la eficiencia de la cola sea el determinante central del rendimiento.