我有一些代码,粗略地说:
pthread_create(thread_timeout, NULL, handleTimeOut, NULL);
void handleTimeOut()
{
/*...*/
pthread_cancel(thread_timeout);
/*...*/
}
但正如我在pthread手册中注意到的那样,取消必须由另一个线程使用。我试图使用pthread_exit()函数,但是这个线程再次挂起......
如何正确处理胎面终止?如果函数handleTimeOut()刚刚结束而没有特殊的pthread函数,它会成功终止吗?
答案 0 :(得分:2)
在没有合作的情况下杀死一个线程是一个问题的处方。正确的解决方案是允许外部线程请求线程清理和终止的解决方案,并让线程周期性地举例说明这种状态,当它被请求时,它会跟随请求。这样的请求可以通过所有线程可以共享的任何内容来完成。
答案 1 :(得分:0)
如果一个线程要完成,它可以调用pthread_exit()
,也可以从初始线程函数返回。这些是等价的。
我没有看到为什么线程无法调用pthread_cancel()
本身的任何原因,但这非常不寻常。