pthread_cancel无效

时间:2015-02-20 07:23:20

标签: c multithreading unix pthreads

我有2个pthreads,即t1和t2在main中创建并加入。他们的处理程序分别在下面给出了a和b的功能。

void a()
{
 .....
 usleep(1000000);
 pthread_mutex_lock(&m);
 .....
 pthread_mutex_unlock(&m);
}
void b()
{
 .....
 usleep(1000000);
 pthread_mutex_lock(&m);
 .....
 pthread_mutex_unlock(&m);
}

当我在休眠时间内调用pthread_cancel(t1)时,取消不成功并返回值3.如何取消此线程或如何强制终止其主要名称为t1或t2的线程?

2 个答案:

答案 0 :(得分:0)

不是pthread_cancel()函数的语法

int pthread_cancel(pthread_t thread);

所以,你应该打电话给pthread_cancel(t1);,IMO。

此外,尝试使用值为pthread_setcancelstate()的{​​{1}} API启用线程函数的可取消状态,并将取消类型更改为使用PTHREAD_CANCEL_ENABLE异步。

注意: @amdn link to this previous answer也可能会有所帮助。

答案 1 :(得分:-1)

尝试使用SIGKILL发送pthread_kill(tid, SIGKILL)信号。