我在主线程中创建并连接了 2 个 pthread,即 t1 和 t2。它们的处理程序分别转到下面给出的函数 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);
}
当我在 sleep 期间调用 pthread_cancel(t1) 时,取消不成功,并且返回值 3。如何取消此线程或如何从 main 中强制终止其名称为 t1 或 t2 的线程?
最佳答案
这不是 pthread_cancel()
的语法吗?功能
int pthread_cancel(pthread_t thread);
所以,您应该调用 pthread_cancel(t1);
,IMO。
此外,尝试使用值为 PTHREAD_CANCEL_ENABLE
的 pthread_setcancelstate()
API 启用线程函数的可取消状态,并更改 >使用pthread_setcanceltype()
将取消类型设置为异步。
注意:link to this previous answer @amdn 可能也会有帮助。
关于c - pthread_cancel 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28623596/