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

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

Моя идея:

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

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

Благодарность


person user1002288    schedule 27.10.2011    source источник


Ответы (2)


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

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

person A.H.    schedule 27.10.2011

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

person thiton    schedule 27.10.2011