📅  最后修改于: 2023-12-03 14:45:41.302000             🧑  作者: Mango
pthread_testcancel
是一个 POSIX 线程库中的函数,用于在进入可取消的线程等待状态时检查线程是否已被请求取消。
在可取消的线程等待状态(如 pthread_cond_wait
或 pthread_join
)中,该函数会检查该线程是否已被请求取消。如果是,则执行线程取消动作,即调用线程清理函数并终止线程。
该函数只适用于可取消的线程,也就是调用 pthread_setcanceltype
将取消类型设置为 PTHREAD_CANCEL_ENABLE
的线程。
#include <pthread.h>
void pthread_testcancel(void);
无返回值。
#include <stdio.h>
#include <pthread.h>
pthread_t tid;
void *thread_func(void *arg)
{
// 检查是否被取消,若是则退出线程
pthread_testcancel();
// 此处为正常线程执行的代码
printf("Thread is running.\n");
return NULL;
}
int main(int argc, char *argv[])
{
if (pthread_create(&tid, NULL, thread_func, NULL) != 0) {
printf("Create thread failed.\n");
return -1;
}
// 程序执行到此处会阻塞等待子线程结束
if (pthread_join(tid, NULL) != 0) {
printf("Join thread failed.\n");
return -1;
}
return 0;
}
pthread_testcancel
通常用于可取消的线程等待状态,如 pthread_cond_wait
或 pthread_join
。pthread_testcancel
不会生效。此时可以使用 pthread_cancel
强制取消线程。pthread_cancel
强制取消线程之前,请确保已设置线程的清理函数,并在清理函数中释放线程占用的资源。可以使用 pthread_cleanup_push
和 pthread_cleanup_pop
宏来设置清理函数。pthread_mutex_unlock
等函数手动解锁。