对于一个多线程程序,如果一个线程死亡,你怎么知道这个?对于一个多线程程序,如果一个线程死亡,你怎么知道这个?
我的想法:
(1)用PS检查LWP,但它是手工,效率不高。 (2)在每个线程中设置一个try-catch,如果它不正常退出,则捕获它。 (3)让死亡线程发送消息给std :: cout或主线程。
其他更好的想法?
感谢
对于一个多线程程序,如果一个线程死亡,你怎么知道这个?对于一个多线程程序,如果一个线程死亡,你怎么知道这个?
我的想法:
(1)用PS检查LWP,但它是手工,效率不高。 (2)在每个线程中设置一个try-catch,如果它不正常退出,则捕获它。 (3)让死亡线程发送消息给std :: cout或主线程。
其他更好的想法?
感谢
您可以在线程函数的很早阶段使用pthread_cleanup_push(3)
。赋予pthread_cleanup_push
的函数可以设置一个“观察者”线程可以拾取的标志。 pthread_cleanup_push
也受到pthread_exit
的支持,并且不受例外的限制。
编辑:用析构函数使用pthread_key_create(3)
和线程函数调用初pthread_setspecific(3)
:要做到这一点的第二种方式。析构函数可以向观看线程发出即将死亡的信号。
你可以简单地使用pthread_cleanup_push和pthread_cleanup_pop执行的线程退出清理处理程序。这将捕获cancel/pthread_exit事件。