如何关闭线程(pthread库)?

时间:2011-06-22 09:56:40

标签: c++ c pthreads

我有一些代码,粗略地说:

pthread_create(thread_timeout, NULL, handleTimeOut, NULL);

void handleTimeOut()
{
  /*...*/
  pthread_cancel(thread_timeout);
  /*...*/
}

但正如我在pthread手册中注意到的那样,取消必须由另一个线程使用。我试图使用pthread_exit()函数,但是这个线程再次挂起......

如何正确处理胎面终止?如果函数handleTimeOut()刚刚结束而没有特殊的pthread函数,它会成功终止吗?

2 个答案:

答案 0 :(得分:2)

在没有合作的情况下杀死一个线程是一个问题的处方。正确的解决方案是允许外部线程请求线程清理和终止的解决方案,并让线程周期性地举例说明这种状态,当它被请求时,它会跟随请求。这样的请求可以通过所有线程可以共享的任何内容来完成。

答案 1 :(得分:0)

如果一个线程要完成,它可以调用pthread_exit(),也可以从初始线程函数返回。这些是等价的。

我没有看到为什么线程无法调用pthread_cancel()本身的任何原因,但这非常不寻常。