posix pipe como cola de trabajo

as implementaciones normales de una cola de trabajo que he visto involucran mutexes y variables de condición.

Consumidor
A) Acquires Lock
B) While Queue empty
      Wait on Condition Variable (thus suspending thread and releasing lock)
C) Work object retrieved from queue
D) Lock is released
E) Do Work
F) GOTO A
Productor
A) Acquires Lock
B) Work is added to queue
C) condition variable is signaled (potentially releasing worker)
D) Lock is released

He estado navegando por algún código y vi una implementación usando tuberías POSIX (no he visto esta técnica antes).

Consumidor
A) Do select on pipe (thus suspending thread while no work)
B) Get Job from pipe
C) Do Work
D) GOTO A
Productor
A) Write Job to pipe.

Dado que el productor y el consumidor son hilos dentro de la misma aplicación (por lo tanto, comparten el mismo espacio de direcciones y, por lo tanto, los punteros entre ellos son válidos); los trabajos se escriben en la tubería como la dirección del objeto de trabajo (un objeto C ++). Entonces, todo lo que debe escribirse / leerse desde la tubería es una dirección de 8 bytes.

Mi pregunta es

¿Es esta una técnica común (me han protegido de esto) y cuáles son las ventajas / desventajas?

Mi curiosidad se despertó porque la técnica de tubería no involucra ningún bloqueo o señal visible (puede estar oculto en la selección). ¿Entonces me preguntaba si esto sería más eficiente?

Editar

Basado en comentarios en @Maxim Yegorushkin respuesta.

En realidad, el "Productor" en este escenario está involucrado en una gran cantidad de E / S de gran volumen de muchas fuentes en paralelo. Por lo tanto, sospecho que el autor original, aunque era muy deseable que este hilo no se bloqueara bajo ninguna circunstancia, pero tampoco quería un trabajo de alto costo en el hilo "Productor".

Respuestas a la pregunta(8)

Su respuesta a la pregunta