对于多线程程序,如果一个线程死了你怎么知道?

时间:2011-10-27 18:14:58

标签: linux multithreading unix thread-safety pthreads

对于多线程程序,如果一个线程死了你怎么知道?

我的想法:

(1)使用ps检查LWP,但它是手动的,效率不高。 (2)在每个线程中设置一个try-catch,如果它非正常退出,则捕获它。 (3)让临死线程向std :: cout或主线程发送消息。

其他更好的想法?

感谢

2 个答案:

答案 0 :(得分:4)

您可以在线程函数的早期阶段使用pthread_cleanup_push(3)。给pthread_cleanup_push的函数可以设置一个“观察者”线程可以获取的标志。 pthread_cleanup_push也尊重pthread_exit,并且不受例外约束。

编辑:第二种方法:将pthread_key_create(3)与析构函数一起使用,并在线程函数的早期调用pthread_setspecific(3)。析构函数可以通知观察线即将死亡。

答案 1 :(得分:1)

您可以简单地使用pthread_cleanup_push和pthread_cleanup_pop在线程退出时执行清理处理程序。这将捕获cancel / pthread_exit事件。