POSIX hilos y equidad (semáforos)

He creado un programa en C que crea 2 buffers. Los índices del búfer contienen caracteres individuales, 'A' o 'b', etc. ... Para obtener más información sobre el subprocesamiento múltiple, creé un conjunto de semáforos basados en el problema del productor / consumidor para producir caracteres y consumir caracteres de los búferes. Tengo 3 hilos productores para cada búfer y 10 hilos consumidores. Los consumidores toman un artículo de cada búfer y luego lo informan (liberando también la memoria del artículo consumido). Ahora, por lo que he leído, se supone que sem_wait () señala el "hilo de espera más largo" cuando sale de un estado de bloqueo (lo leí en un libro y en una biblioteca POSIX en línea).

Ahora, ¿es esto realmente cierto?

La aplicación que he hecho debe tener tanto consumidores como productores esperando en la misma puerta sem_wait (), pero los productores entran en la sección crítica más del doble del tiempo que cualquier consumidor. Los consumidores tienen que esperar un semáforo adicional, pero eso no debería hacer una gran diferencia. Parece que no puedo entender por qué está sucediendo, así que espero que alguien más lo haga. Si duermo (1) en los hilos del productor, los consumidores entran muy bien y los búferes rondan alrededor de 0 elementos ... como creo que sucedería de lo contrario.

Además, ¿el orden de creación de hilos debe desempeñar algún papel en la forma en que estructura el programa para ser equitativo?

Es decir, produzca uno de cada tipo de forma redonda hasta que todos estén creados y en funcionamiento.

¿Hay algún método que alguien pueda describirme para instituir un sistema más justo de acceso a hilos? He leído que crear un sistema de cola FIFO podría ser una solución, donde el hilo de espera más largo tiene la máxima prioridad (que es lo que pensé que haría sem_wait () de todos modos).

Solo me pregunto qué métodos existen para el roscado rudimentario y de nivel superior.

Respuestas a la pregunta(2)

Su respuesta a la pregunta