我有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的线程?
答案 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)
信号。