线程的属性

线程的属性练习

设计一个程序,要求在程序中创建两条子线程,主线程创建一个线程的属性对象,并对线程的属性对象进行初始化之后,要求创建的子线程的属性设置为分离属性,子线程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;
}
posted @ 2025-04-10 20:50  骗人就变小狗  阅读(37)  评论(0)    收藏  举报