Ho un programma C++ su Linux (CentOS 5.3) che genera più thread che sono in un ciclo infinito per eseguire un lavoro e dormire per determinati minuti. Ora devo cancellare i thread in esecuzione nel caso in cui arrivi una nuova notifica di configurazione e inizi appena un nuovo set di thread, per il quale ho usato pthread_cancel. Quello che ho osservato è che i fili non si sono fermati anche dopo aver ricevuto l'indicazione di annullamento, anche alcuni fili dormiente si stavano alzando dopo che il sonno era completato.Annullamento di un thread utilizzando pthread_cancel: buona pratica o errata
Poiché il comportamento non è stato desiderato, l'utilizzo di pthread_cancel nello scenario menzionato solleva la questione dell'ottima o cattiva pratica.
Si prega di commentare l'utilizzo di pthread_cancel nello scenario sopra citato.
+1 per evitare la cancellazione, è il modo più veloce per perdite di memoria, e peggio. Chiedi invece educatamente :) –
Sembra che debba cambiare la logica per la terminazione del thread usando un flag condiviso. Ma in altre note il mio programma aveva thread con stato di annullamento impostato su ASYNCHRONOUS che, credo, è correlato alla chiusura immediata dei thread dopo aver chiamato i rispettivi gestori di cleanup. – Mandar
@ user584631: La pagina di manuale pthreads dice che quando la modalità è impostata su asincrono, la cancellazione può essere immediata, ma il sistema non è tenuto a farlo. –