2010-10-08 27 views
6

Ho avuto queste domande nella mia mente poiché stavo leggendo alcuni nuovi argomenti su processi e thread. Sarei felice se qualcuno potesse aiutarmi.Domanda su processori e thread zombie

1) Cosa succede se un thread è contrassegnato come non modificabile e quindi il processo viene eliminato all'interno della sezione critica?

2) Abbiamo un thread principale per il programma che è noto al sistema operativo? Voglio dire, il sistema operativo fornisce al primo thread del programma dei diritti o qualcosa del genere?

3) Quando uccidiamo un processo e i fili non sono uniti, diventano zombi?

+0

Inoltre, c'è un'altra domanda qui, in che modo i thread condividono lo stack del processo in esecuzione? Lo stack li contiene tutti o sono preempiti dallo stack quando si passa da un thread all'altro? –

risposta

5

In primo luogo, non uccidere o annullare i thread, chiedere loro di uccidersi. Se uccidi un thread dall'esterno non sai mai quali effetti collaterali - variabili, stato di primitive di sincronizzazione, ecc. - ti lasci dietro. Se per un thread è necessario terminare un altro, fare in modo che il thread problematico controlli un interruttore, catturi un segnale, qualunque sia, e pulisca il suo stato prima di uscire da esso.

1) Se per incancelabile intendi staccato, come un filo congiunto. Non sai quale pasticcio ti stai lasciando dietro se lo uccidi ciecamente.

2) Dal punto di vista del livello di applicazione, la cosa principale è che se il thread principale termina() o ritorna(), esso elimina tutti gli altri thread. Se il thread principale si termina con pthread_exit(), i thread rimanenti continuano.

3) Molto simile a un processo, il thread manterrà alcune risorse finché non viene raccolto (unito) o il programma termina, a meno che non sia stato eseguito come distaccato.

RE Nota: i thread non condividono uno stack che ciascuno ha il proprio. Vedi clone() per alcune informazioni sulla creazione del thread.

+1

Grazie per la tua risposta, innanzitutto non intendo distaccato, voglio dire quando si segna come PTHREAD_CANCEL_DISABLE. Anche per "ciascuno ha il suo" intendi come stack di processi o ci sono diffrences? –

+1

Ci scusiamo per (1). Non penso che i gestori di cleanup vengano chiamati se il processo viene ucciso piuttosto che cancellato. IOW i punti di cancellazione sono operativi tramite la libreria pthread; non impediranno che il thread venga colpito dal sistema operativo. Però farà un bel piccolo test di fine settimana. AFAIK non ci sono differenze nello stack, è solo una porzione di memoria contigua per ogni thread. – Duck