[C++] 在Pthread库中杀死线程



Answers

这个问题有两种方法。

  • 使用信号 :线程使用sigaction()安装信号处理程序,该信号处理程序设置一个标志,并且线程会定期检查该标志以查看它是否必须终止。 当线程必须终止时,使用pthread_kill()向它发出信号,并等待它终止于pthread_join() 。 这种方法需要父线程和子线程之间的预同步,以保证子线程在能够处理终止信号之前已经安装了信号处理程序;
  • 使用取消点 :只要执行取消功能,线程就会终止。 当线程必须终止时,执行pthread_cancel()并等待其终止与pthread_join() 。 此方法需要详细使用pthread_cleanup_push()pthread_cleanup_pop()以避免资源泄漏。 最后两次调用可能会破坏代码的词法范围(因为它们可能是生成{}令牌的宏)并且很难正确维护。

(注意,如果您已经使用pthread_detach()分离了线程,则无法使用pthread_join()再次连接它。)

这两种方法都非常棘手,但在特定情况下可能特别有用。

Question

我使用pthread_create(&thread1, &attrs, //... , //...); 并且如果发生某些情况需要杀死这个线程如何杀死这个?




看一下pthread_kill()函数。




Links