#include <pthread.h>
int pthread_cancel(pthread_t thread);
-功能:杀死一个正在运行的线程,让线程终止。
取消线程,可以终止某个线程的运行,但是并不是立马终止,而是当子线程执行到一个取消点,线程才会终止。
取消点:系统规定好的一些系统调用,可以粗略的理解为从用户区到内核区的切换。这个位置称之为取消点。
thread:待杀死的进程id
返回值:成功:0,失败:error
用代码实现:
1 #include <pthread.h>
2 #include <stdio.h>
3 #include <unistd.h>
4 #include <stdlib.h>
5 #include <string.h>
6 void *callback(void *arg)
7 {
8 printf("child pthread:%ld\n",pthread_self());
9 for(int i=0;i<5;++i)
10 {
11 printf("child:%d\n",i+1);//这个就是取消点
12 }
13 return 0;
14 }
15 int main()
16 {
17 pthread_t tid;
18 int ret=pthread_create(&tid,NULL,callback,NULL);
19 if(ret!=0)
20 {
21 printf("error info:%s\n",strerror(ret));
22 exit(0);
23 }
24
25 pthread_cancel(tid);//当运行到取消点后立马取消线程
26
27 for(int i=0;i<5;++i)
28 {
29 printf("main:%d\n",i+1);
30 }
31 printf("child pthread:%ld,main pthread:%ld\n",tid,pthread_self());
32
33 pthread_exit(NULL);
34
35 return 0;
36 }
每次运行的结果都不一样:
第一次:
第二次:
第三次:
可以看出每次运行的结果都不相同,说明每次运行到取消点的时间都不一样。