鄂缮输 发表于 2025-6-11 15:26:40

线程的属性

线程的属性练习

设计一个程序,要求在程序中创建两条子线程,主线程创建一个线程的属性对象,并对线程的属性对象进行初始化之后,要求创建的子线程的属性设置为分离属性,子线程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;
}
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 线程的属性