2011-09-01 18 views
5

Voglio rendere un thread inattivo per un periodo di tempo indefinito. Il motivo per cui voglio farlo è perché il mio programma agisce solo quando riceve un segnale e non ha nulla da fare nel thread primario. Pertanto, tutta l'elaborazione viene eseguita all'interno del gestore di segnale. Come posso dormire per un tempo indefinito?Dormire un thread per un periodo di tempo indefinito in Linux

+2

Attualmente stai utilizzando thread o solo segnali? Se i thread, quali sono gli altri thread e cosa stanno facendo? (Se stai mixando segnali e thread c'è del lavoro extra da fare, ma se stai usando "thread primario" per indicare la parte del programma che non è in esecuzione in un gestore di segnale, è diverso e implica un diverso risposta) – Random832

risposta

8

Se stai facendo qualcosa su un'altra discussione, chiama semplicemente pthread_join su quel thread e bloccherà praticamente "per sempre". È possibile ottenere lo stesso effetto usando una variabile di condizione.

+0

Sono d'accordo con Chris. Sta suggerendo di avere il thread principale in attesa che il/i thread/i figlio/i per uscire, quindi di uscire da solo. Questo non solo fa ciò che vuoi, ma previene gli zombi se il filo bambino muore o viene ucciso. –

+0

Questa è una soluzione geniale, Chris! Grazie! – MetallicPriest

+1

I thread non possono essere uccisi e non diventano "zombi" nello stesso senso dei processi. Se non ti interessa unirti a un thread, basta staccarlo per iniziare in modo da non doverti preoccupare di ripulire il descrittore del thread. –

4

Utilizzare i semafori!

Il thread è bloccato su un semaforo utilizzando sem_wait. Una volta che hai bisogno di riattivare il filo, segnala il semaforo usando sem_post da un altro thread.

1

POSIX fornisce la funzione sigsuspend ad attendere un segnale. (Come menzionato in un'altra risposta, anche lo pause funziona.)

Problemi correlati