c - pthread_cancel 不起作用

标签 c multithreading unix pthreads

我在主线程中创建并连接了 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_ENABLEpthread_setcancelstate() API 启用线程函数的可取消状态,并更改 >使用pthread_setcanceltype()将取消类型设置为异步。

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

关于c - pthread_cancel 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28623596/

相关文章:

c - 如何将 unsigned int 转换为 uint64

java - 关键部分: be sure that this method is executed by only 1 thread

python - 等待线程完成后再再次运行它们

c++ - 调试问题:(

Linux sudo 更改用户

c - sizeof 取消引用的指针未确定?

C 设置位(位操作)

c - 如何将 C 语言更改为外部磁盘驱动器

c# - 调用线程无法访问此对象,因为另一个线程拥有它 - WPF

linux - 在 Linux 中制作 tls 包时出现 "skipping incompatible/usr/lib/libc.so when searching for -lc"问题