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


Answers

有两种解决这个问题的方法。

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

(请注意,如果您已经使用pthread_detach()分离了线程,则不能再使用pthread_join()将其加入。)

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

Question

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




看看pthread_kill()函数。