如何关闭线程(pthread库)?

3

我有一些代码,大致如下:

pthread_create(thread_timeout, NULL, handleTimeOut, NULL);

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

但是我注意到pthread的手册中取消必须由其他线程使用。我试图使用pthread_exit()函数代替,但这个线程又再次挂起...

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

2个回答

2

在没有线程配合的情况下强制终止线程会导致问题。正确的解决方案应该是允许外部线程请求线程清理并终止,而且当被请求时,该线程定期检查此状态并执行请求。这样的请求可以通过所有线程都可以共享的任何方式来完成。


应该使用哪些函数来终止线程?cancel、exit、kill? - Rorschach
关键是线程A不应使用任何函数直接终止线程B,而是需要设计线程A和B,使得线程A可以请求线程B在下一个方便的时间点自行终止,并且线程B会尊重该请求。这允许线程B执行适当的清理操作,释放其资源并执行其它必要的操作以进行整洁的终止。 - mah
也许我理解错了,你是在问线程A如何终止自己?如果是这样的话,如@caf所述,pthread_exit()就可以了(除非直接运行主线程函数的末尾更容易)。 - mah

0

如果一个线程想要结束,它可以调用pthread_exit(),也可以从初始线程函数返回。这两种方式是等效的。

我没有看到任何理由说明为什么一个线程不能在自己身上调用pthread_cancel(),但这种情况非常不寻常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接