函数运行结果:

4线程分离
int pthread_detach(pthread_t th);
pthread_detach函数使线程处于被分离状态。
如果不等待一个线程,同时对线程的返回值不感兴趣,可以设置这个线程为被分离状态,让系统在线程退出的时候自动回收它所占用的资源。
一个线程不能自己调用pthread_detach改变自己为被分离状态,只能由其他线程调用pthread_detach。
5线程取消
int pthread_cancel(pthread_t th);
pthread_cancel函数允许一个线程取消th指定的另一个线程。
函数成功,返回0,否则返回非0。
#include<pthread.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
void * func1(void * arg)
{
while(1)
{
printf("fun run...n");
sleep(1);
}
return NULL;
}
int main()
{
pthread_t t1;
if(pthread_create(&t1,NULL,func1,NULL)!=0)
{
printf("thread_create Failed:%sn",strerror(errno));
return -1;
}
sleep(5);
pthread_cancel(t1);
pthread_join(t1,NULL);
return EXIT_SUCCESS;
}
函数执行结果:

上面我们说过创建一个线程函数pthread_create的第二个参数,用来决定创建线程的一些初始化状态,这里我们 举个例子,改线程一创建就是分离状态的线程(
上面介绍了pthread_detach函数的概念,可以通过pthread_attr_t在创建线程的时候就指定线程属性为detach,而不用创建以后再去修改线程属性。
)
先上一段代码:
#include<pthread.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
void * func(void * arg)
{
int i=0;
for(;i<5;i++)
{
printf("func run%dn",i);
sleep(1);
}
int * p = (int *)malloc(sizeof(int));
*p=11;
return p;
}
int main()
{
pthread_t t1;
pthread_attr_t attr;//申明一个attr的结构体
pthread_attr_init(&attr);//初始化结构体
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);//设置线程为分离线程
int err = pthread_create(&t1,&attr,func,NULL);
if(err!=0)
{
printf("thread_create Failed:%sn",strerror(errno));
}else{
printf("thread_create successn");
}
pthread_attr_destroy(&attr);
pthread_join(t1,NULL);
printf("主线程退出n");
return EXIT_SUCCESS;
}










