2011-09-01 14 views
5

Quiero hacer que un hilo duerma por un tiempo indefinido. La razón por la que quiero hacer esto es porque mi programa solo toma medidas cuando recibe una señal y no tiene nada que hacer en el hilo primario. Por lo tanto, todo el procesamiento se realiza dentro del controlador de señal. ¿Cómo puedo dormir por un tiempo indefinido?Dormir un hilo por un tiempo indefinido en Linux

+2

¿Está utilizando hilos o solo señales? Si hilos, ¿cuáles son los otros hilos y qué están haciendo? (Si está mezclando señales e hilos hay algo de trabajo extra que hacer, pero si solo está usando "hilo primario" para indicar la parte del programa que no está ejecutándose en un manejador de señal, eso es diferente e implica una diferencia respuesta) – Random832

Respuesta

8

Si solo está haciendo algo en otro hilo, simplemente llame al pthread_join en ese hilo y bloqueará prácticamente "para siempre". Puede lograr el mismo efecto usando una variable de condición.

+0

Estoy de acuerdo con Chris. Está sugiriendo que tengas el hilo principal de espera para que el (los) hilo (s) hijo (s) salga (n) y luego salga solo. Esto no solo hará lo que quieras, sino que evitará zombis si el hilo hijo muere o es asesinado. –

+0

¡Esa es una solución brillante, Chris! ¡Gracias! – MetallicPriest

+1

Los hilos no se pueden matar, y no se convierten en "zombies" en el mismo sentido que los procesos. Si no le interesa unir un hilo, simplemente sepárelo para comenzar, de modo que no tenga que preocuparse por limpiar el descriptor del hilo. –

4

¡Utilice semáforos!

Haga que su hilo se bloquee en un semáforo usando sem_wait. Una vez que necesite despertar la señal de su hilo, utilice el semáforo usando sem_post desde otra secuencia.

1

POSIX proporciona la función sigsuspend a esperar una señal. (Como se menciona en otra respuesta, también funciona pause)

Cuestiones relacionadas