对于多线程程序,如果一个线程死了你怎么知道?
我的想法:
(1)使用ps检查LWP,但它是手动的,效率不高。 (2)在每个线程中设置一个try-catch,如果它非正常退出,则捕获它。 (3)让临死线程向std :: cout或主线程发送消息。
其他更好的想法?
感谢
答案 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事件。