线程的属性
线程的属性练习
设计一个程序,要求在程序中创建两条子线程,主线程创建一个线程的属性对象,并对线程的属性对象进行初始化之后,要求创建的子线程的属性设置为分离属性,子线程A输出”hello”,子线程B输出”world”,主线程创建子线程之后就终止。
#include <pthread.h>
#include <stdio.h>
//线程A
void *taskA(void *arg)
{
while(1)
{
printf("Hello,I am threadA,My tid=%d\n",pthread_self());
pthread_exit(NULL);
}
}
//线程B
void *taskB(void *arg)
{
printf("Hello,I am threadB,My tid=%d\n",pthread_self());
pthread_exit(NULL);
}
int main()
{
//1.定义线程的属性
pthread_attr_t thread_attr;
//2.初始化线程属性
pthread_attr_init(&thread_attr);
//3.修改线程属性为分离属性
pthread_attr_setdetachstate(&thread_attr,PTHREAD_CREATE_DETACHED);
//4.创建线程A和线程B
pthread_t threadA;
pthread_t threadB;
pthread_create(threadA,thread_attr,taskA,NULL);
pthread_create(threadB,thread_attr,taskB,NULL);
//5.关闭主线程
while(1)
{
pthread_exit(NULL);
}
return 0;
}
思考:如果用户在创建线程的时候忘记设置线程属性为分离状态,但是又打算让线程在完成任务之后自动释放资源,并且又不想重新创建一条新线程,此时应该如何处理?
答:可以在线程的任务函数中强制把自身的属性设置为分离属性,Linux系统中提供了一个名称叫做pthread_detach()的函数,可以强制分离。
#include <pthread.h>
#include <stdio.h>
//线程A
void *task(void *arg)
{
pthread_detach(pthread_self());
while(1)
{
printf("Hello,I am thread,My tid=%d\n",pthread_self());
pthread_exit(NULL);
}
}
int main()
{
//1.创建线程
pthread_t thread;
pthread_create(thread,NULL,task,NULL);
while(1)
{
}
return 0;
}