Esta pregunta asume un diseño con una condición de carrera inevitable.
Es de suponer, que va a hacer algo como esto:
- Compruebe si el hilo está vivo
- Espere mensaje del hilo
El problema es que esta secuencia no es atómico y no puede ser arreglado Específicamente, ¿qué ocurre si el hilo que está comprobando muere entre el paso (1) y el paso (2)?
Las condiciones de carrera son malas; raras condiciones de carrera doblemente. Echar mano de algo 90% confiable con algo 99.999% confiable es una de las peores decisiones que puede tomar.
La respuesta correcta a su pregunta es "no hagas eso". En su lugar, arregle su aplicación para que los hilos no mueran aleatoriamente.
Si eso es imposible, y algunos hilos son propensos a fallar, y necesita recuperarse de eso ... Entonces su diseño es fundamentalmente defectuoso y no debe usar un hilo. Ponga esa cosa poco confiable en un proceso diferente y use una tubería para comunicarse con ella. La muerte del proceso cierra los descriptores de archivos, y la lectura de una tubería cuyo otro extremo se ha cerrado tiene un comportamiento bien definido, fácil de detectar y sin carreras.
Corto y dulce ... gracias! – jldupont
El problema con eso es que 'YOUR_PTHREAD_ID' podría haber sido reciclado por otro hilo mientras tanto. Por lo tanto, debería ser: __Si obtiene ESRCH, su hilo está muerto, de lo contrario no puede estar seguro__ (a menos que sepa las ID de los hilos recién creados). – RedGlyph
@RedGlyph: este es un caso muy típico de enigma de reciclaje de identificadores.En mi caso, estoy dispuesto a vivir con la pequeña probabilidad de colisión en la que incurro porque estaré sondeando en una frecuencia razonable. – jldupont