Parece que Linux no implementa pthread_suspend y continúa, pero realmente lo necesito.linux pthread_suspend
He intentado cond_wait, pero es demasiado lento. El trabajo que se enhebra se ejecuta principalmente en 50us pero ocasionalmente ejecuta más de 500ms. El problema con cond_wait es doble. El bloqueo de exclusión mutua está tomando tiempos comparables a las ejecuciones de micro segundos y no necesito bloqueo. En segundo lugar, tengo muchos hilos de trabajo y realmente no quiero hacer N variables de condición cuando deben ser despertados.
Sé exactamente qué hilo está esperando para qué trabajo y podría simplemente pthread_continue ese hilo. Un hilo sabe cuándo no hay más trabajo y puede pthread_suspend fácilmente. Esto no usaría bloqueo, evitaría la estampida y sería más rápido. El problema es ... no pthread_suspend o _continue.
¿Alguna idea?
¿Distribuir grandes trozos de trabajo a los hilos, de modo que el costo de bloqueo se convierta en un menor% de sobrecarga? (¿Los hilos pasan más tiempo trabajando y menos tiempo delegando el trabajo?) – Thanatos
El trabajo es grande ... a veces. No se puede decir hasta que lo intentes. Y despaché el trabajo de una manera que no necesita bloqueo en absoluto ... excepto que no he descubierto la forma óptima de bajo costo para suspender y activar los hilos sin bloquear ... cond_wait bloquea un mutex para cada hilo que se despierta Tampoco te permite despertar solo un hilo. Bueno, podría hacer una condición para cada hilo ... argh ... Debe haber una mejor manera. cond_wait parece adecuado para un hilo gui de usuario, pero no para transacciones de alta velocidad. – johnnycrash
Voy a ver el código fuente mañana para cond_wait, así como probar la señal y los métodos de tubería vs cond wait. – johnnycrash