/*
#include <pthread.h>
int pthread_cancel(pthread_t thread);
功能:取消线程(让线程终止)
(比如说杀毒软件清理内存清理到一半后取消清理内存)
取消某个线程,可以终止某个线程的运行,
但不是立马终止,而是当子线程执行到一个取消点,线程才会终止(线程得具有可终止的特性)
取消点:系统规定好的一些系统调用
可以粗略的理解为用户区到内核区的切换的位置,这个位置称之为去小店
*/
#include<string.h>
#include<pthread.h>
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
void *callback(void*arg ){
printf("child thread id : %ld.\n",pthread_self());
for(int i = 0;i < 5;i++){
printf("child : %d\n",i);
sleep(2);
}
return NULL;
}
int main(void){
pthread_t tid;
int ret = pthread_create(&tid,NULL,callback,NULL);
if(ret != 0){
char*str = strerror(ret);
printf("error1:%s\n",str);
}
//取消线程
ret = pthread_cancel(tid);
if(ret != 0){
char*str = strerror(ret);
printf("error1:%s\n",str);
}
for(int i = 0;i < 5;i++){
printf("parent : %d\n",i);
}
//输出主线程和子线程的id
printf("tid : %ld , main thread : %ld.\n",tid,pthread_self());
//退出主线程
pthread_exit(NULL);
return 0;
}
老师演示的时候运行的结果
自己写程序运行的结果
发现结果很正常于是在子进程的执行模块当中增加了一个 sleep(2)