如何安全地关闭线程?

时间:2011-06-15 03:48:38

标签: c++ pthreads

     pthread_create(&thread, NULL, AcceptLoop, (void *)this);

我已经声明了这样并且在AcceptLoop函数内部我有无限循环。我想在关闭服务器时关闭此线程。我读过pthread_cancel和pthread_join,但我不确定哪一个更好更安全。我想听一些详细的说明或教程。提前谢谢。

2 个答案:

答案 0 :(得分:2)

您不需要做任何事情,只需从线程函数返回就可以干净地结束线程。您也可以拨打pthread_exit(),但我宁愿回来。 pthread_cancel()是可怕的,复杂的/难以正确的。尽可能保持清醒。 如果您想知道线程何时结束并且对pthread_join()值感兴趣,则最需要return

哎呀,我错了。已经有一段时间了。为了我说的是真的,你必须脱离你的线程。否则你需要调用pthread_join:

  

pthread_join(3)或   应该调用pthread_detach()   每个线程          应用程序创建的,以便为线程提供系统资源   可          释放。 (但请注意,所有线程的资源都已释放   当。。。的时候          流程终止。)

http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_detach.3.html

答案 1 :(得分:1)

我相信你想通过主线程的信号退出工作线程。

AcceptLoop内,而不是无限循环,你循环一个条件,你可以通过你的主线程设置条件,你将不得不为这个变量使用一些同步。从主线程设置变量后,工作线程AcceptLoop将会中断,然后您可以调用pthread_exit

如果您希望主线程等待子线程退出,可以使用pthread_join来执行此操作。

通常,子线程可以在三种情况下退出:

  1. 致电pthread_exit
  2. 致电pthread_cancel
  3. 线程函数返回。