我正在使用不分配任何局部变量的pthread。由于我不会进入这里的原因,我需要一个pthread_cancel()
选项,我正在编写的线程应该能够支持它(没有资源可以清理,可以随时停止执行)。目前,我有一个问题,因为pthread_cancel
在pthread实际运行完毕之前返回,导致我想在线程取消后才触摸的共享资源出现问题。
有什么方法可以让我知道什么时候我的pthread得到了很好的结论?是否有一个我没有找到的功能,或者我不熟悉的参数?
将
pthread_cancel(thread_handle);
pthread_join(thread_handle, NULL);
诀窍,还是不能保证(因为thread_handle
可能已经无效)?
我对pthreads很新,所以最好的做法是欢迎的(除了“不要使用pthread_cancel()
”,我已经学过了:P)。
答案 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
甚至是不安全的。如果线程就像你调用它一样终止怎么办?