posix pipe como uma fila de trabalho

s implementações normais de uma fila de trabalho que vi envolvem mutexes e variáveis de condiçã

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
Produtor
A) Acquires Lock
B) Work is added to queue
C) condition variable is signaled (potentially releasing worker)
D) Lock is released

Estive navegando em algum código e vi uma implementação usando os tubos POSIX (nunca vi essa 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
Produtor
A) Write Job to pipe.

Desde que o produtor e o consumidor são threads dentro do mesmo aplicativo (portanto, eles compartilham o mesmo espaço de endereço e, portanto, os ponteiros entre eles são válidos); os trabalhos são gravados no canal como o endereço do objeto de trabalho (objeto A C ++). Portanto, tudo o que precisa ser escrito / lido no canal é um endereço de 8 byte

Minha pergunta é

Essa é uma técnica comum (fui protegida disso) e quais são as vantagens / desvantagens?

Minha curiosidade foi despertada porque a técnica de tubulação não envolve nenhum bloqueio ou sinal visível (pode estar oculta na seleção). Então, eu queria saber se isso seria mais eficiente?

Editar

Com base nos comentários na resposta de Maxim Yegorushki

Na verdade, o "Produtor" nesse cenário está envolvido em um monte de E / S de alto volume de várias fontes em paralelo. Por isso, suspeito que o autor original, apesar de muito desejável que esse encadeamento não bloqueie sob nenhuma circunstância, mas também não queira trabalhos de alto custo no encadeamento "Producer"

questionAnswers(8)

yourAnswerToTheQuestion