使用pthread_cancel时pthread_join可能返回的值是多少

时间:2015-03-16 10:10:26

标签: c++ linux pthreads pthread-join

以下代码显示我尝试在时间start_routine内未完成ts时取消线程,并加入线程以确保线程终止。我在start_routineres2返回PTHREAD_CANCELED的简单函数上使用了此函数。但是,我尝试使用这种方法在start_routine中调用第三方库,这不会返回PTHREAD_CANCELED(即我得到" pthread由于xxx而被终止?")。

pthread_create(&thread, &attr, start_routine, (void *)&arg);
if (0 != pthread_timedjoin_np(thread, &res1, &ts)
{
    if (0 == pthread_cancel(thread))
    {
        if (0 == pthread_join(thread, &res2))
        {
            if (PTHREAD_CANCELED == res2)
            {
                std::cout << "pthread is cancelled" << std::endl;
            }
            else
            {
                std::cout << "pthread is terminated due to xxx?" << std::endl;
            }
        }
    }
}

根据pthread_join

的联机帮助页
  

如果目标线程被取消,那么PTHREAD_CANCELED将被放入* retval。

使用pthread_joinpthread_cancel的可能返回值是多少?为什么pthread_join有时不会返回PTHREAD_CANCELED

请注意,我使用默认取消类型(即PTHREAD_CANCEL_DEFERRED)并启用取消(即PTHREAD_CANCEL_ENABLE)。

0 个答案:

没有答案