等待pthread_cancel得出结论

时间:2011-08-07 07:17:14

标签: pthreads

我正在使用不分配任何局部变量的pthread。由于我不会进入这里的原因,我需要一个pthread_cancel()选项,我正在编写的线程应该能够支持它(没有资源可以清理,可以随时停止执行)。目前,我有一个问题,因为pthread_cancel在pthread实际运行完毕之前返回,导致我想在线程取消后才触摸的共享资源出现问题。

有什么方法可以让我知道什么时候我的pthread得到了很好的结论?是否有一个我没有找到的功能,或者我不熟悉的参数?

pthread_cancel(thread_handle);
pthread_join(thread_handle, NULL);

诀窍,还是不能保证(因为thread_handle可能已经无效)?

我对pthreads很新,所以最好的做法是欢迎的(除了“不要使用pthread_cancel()”,我已经学过了:P)。

2 个答案:

答案 0 :(得分:3)

kernel.org手册页实际上是在做这件事。这很安全。

s = pthread_cancel(thr);
if (s != 0)
    handle_error_en(s, "pthread_cancel");

/* Join with thread to see what its exit status was */

s = pthread_join(thr, &res);
if (s != 0)
    handle_error_en(s, "pthread_join");

答案 1 :(得分:1)

在可连接线程上调用pthread_join之前,其tid仍然有效。如果线程是可连接的(必须使pthread_cancel安全),那么thread_handle仍然必须有效。

如果线程已分离,则调用pthread_cancel甚至是不安全的。如果线程就像你调用它一样终止怎么办?