Voor een Multithreading-programma, als één thread sterft, hoe weet je dat?

Voor een Multithreading-programma, als één thread sterft, hoe weet je dat?

Mijn idee:

(1) gebruik ps om LWP te controleren, maar het is handmatig, niet efficiënt. (2) zet een try-catch in elke thread, als deze niet-normaal afsluit, vang hem dan op. (3) laat de stervensdraad een bericht sturen naar std :: cout of hoofddraad.

Andere betere ideeën?

bedankt

3

2 antwoord

U kunt pthread_cleanup_push (3) in een zeer vroeg stadium van de thread-functie gebruiken. De functie gegeven aan pthread_cleanup_push kan een vlag instellen die een "watcher" -draad kan oppikken. pthread_cleanup_push wordt ook gehonoreerd door pthread_exit en is niet gebonden aan uitzonderingen.

Edit: A second way to do this: Use pthread_key_create(3) with a destructor function and call pthread_setspecific(3) early in the thread function. The destructor function can signal the watching thread it's imminent death.

4
toegevoegd

U kunt eenvoudigweg pthread_cleanup_push en pthread_cleanup_pop gebruiken om een ​​opschoningshandler uit te voeren bij het afsluiten van threads. Dit zou annulerings/pthread_exit-gebeurtenissen vangen.

1
toegevoegd