Для многопоточной программы, если один поток умирает, как вы можете это знать? - PullRequest
3 голосов
/ 27 октября 2011

Для многопоточной программы, если один поток умирает, как вы можете это знать?

Моя идея:

(1) использовать ps для проверки LWP, но это вручную, не эффективно.(2) установите try-catch в каждом потоке, если он выйдет ненормально, перехватите его.(3) пусть умирающий поток отправит сообщение в std :: cout или основной поток.

Другие лучшие идеи?

спасибо

Ответы [ 2 ]

4 голосов
/ 27 октября 2011

Вы можете использовать pthread_cleanup_push(3) на очень ранней стадии в функции потока. Функция, заданная для pthread_cleanup_push, может установить некоторый флаг, который может поднять поток «наблюдателя». pthread_cleanup_push также соблюдается pthread_exit и не связано с исключениями.

Редактировать : Второй способ сделать это: использовать pthread_key_create(3) с функцией-деструктором и вызывать pthread_setspecific(3) в начале функции потока. Функция деструктора может сигнализировать потоку наблюдения о его скорой смерти.

1 голос
/ 27 октября 2011

Вы можете просто использовать pthread_cleanup_push и pthread_cleanup_pop для выполнения обработчика очистки при выходе из потока.Это будет перехватывать события отмены / pthread_exit.

...