📅  最后修改于: 2023-12-03 15:30:14.500000             🧑  作者: Mango
在多线程程序中,有时候需要提前结束某个线程的执行, 在 C 语言的 POSIX 线程库中,提供了一种叫做 pthread_cancel() 的函数,可以用来中止指定线程。
#include <pthread.h>
int pthread_cancel(pthread_t thread);
pthread_cancel() 函数会请求取消指定线程 thread 的执行。调用该函数后,线程 thread 将立即响应取消请求,并退出线程的执行。但是,线程终止的具体时间是不确定的,可能需要一定的时间才能真正终止。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
void *thread_func(void *arg)
{
int i;
for (i = 0; i < 10; i++) {
printf("Thread running: %d\n", i);
sleep(1);
}
pthread_exit(NULL);
}
int main()
{
pthread_t tid;
if (pthread_create(&tid, NULL, thread_func, NULL) != 0) {
printf("Create thread error.\n");
exit(1);
}
sleep(5);
printf("Main thread stop the sub thread.\n");
pthread_cancel(tid);
pthread_join(tid, NULL);
return 0;
}
代码说明:
代码运行结果:
Thread running: 0
Thread running: 1
Thread running: 2
Thread running: 3
Thread running: 4
Main thread stop the sub thread.
可以看出,主线程在运行了 5 秒钟后,发出了取消子线程的请求,子线程在收到请求后,立刻响应并退出了执行。
pthread_cancel() 函数是一个非常有用的函数,可以帮助我们优雅的结束一个线程的执行。但是,需要注意的是,它并不会强制中断线程的执行,线程的终止时间可能需要一定时间。此外,在线程终止时,需要考虑释放线程所占用的资源,否则可能会出现资源泄漏的情况。