找回密码
 立即注册
首页 业界区 安全 线程的属性

线程的属性

鄂缮输 2025-6-11 15:26:40
线程的属性练习

设计一个程序,要求在程序中创建两条子线程,主线程创建一个线程的属性对象,并对线程的属性对象进行初始化之后,要求创建的子线程的属性设置为分离属性,子线程A输出”hello”,子线程B输出”world”,主线程创建子线程之后就终止。
  1. #include <pthread.h>
  2. #include <stdio.h>
  3. //线程A
  4. void *taskA(void *arg)
  5. {
  6.     while(1)
  7.     {
  8.         printf("Hello,I am threadA,My tid=%d\n",pthread_self());
  9.         pthread_exit(NULL);
  10.     }
  11. }
  12. //线程B
  13. void *taskB(void *arg)
  14. {
  15.     printf("Hello,I am threadB,My tid=%d\n",pthread_self());
  16.     pthread_exit(NULL);
  17. }
  18. int main()
  19. {
  20.     //1.定义线程的属性
  21.     pthread_attr_t thread_attr;
  22.     //2.初始化线程属性
  23.     pthread_attr_init(&thread_attr);
  24.     //3.修改线程属性为分离属性
  25.     pthread_attr_setdetachstate(&thread_attr,PTHREAD_CREATE_DETACHED);
  26.     //4.创建线程A和线程B
  27.     pthread_t threadA;
  28.     pthread_t threadB;
  29.     pthread_create(threadA,thread_attr,taskA,NULL);
  30.     pthread_create(threadB,thread_attr,taskB,NULL);
  31.     //5.关闭主线程
  32.     while(1)
  33.     {
  34.         pthread_exit(NULL);
  35.     }
  36.    
  37.     return 0;
  38. }
复制代码
思考:如果用户在创建线程的时候忘记设置线程属性为分离状态,但是又打算让线程在完成任务之后自动释放资源,并且又不想重新创建一条新线程,此时应该如何处理?
答:可以在线程的任务函数中强制把自身的属性设置为分离属性,Linux系统中提供了一个名称叫做pthread_detach()的函数,可以强制分离。
  1. #include <pthread.h>
  2. #include <stdio.h>
  3. //线程A
  4. void *task(void *arg)
  5. {
  6.     pthread_detach(pthread_self());
  7.     while(1)
  8.     {
  9.         printf("Hello,I am thread,My tid=%d\n",pthread_self());
  10.         pthread_exit(NULL);
  11.     }
  12. }
  13. int main()
  14. {
  15.     //1.创建线程
  16.     pthread_t thread;
  17.     pthread_create(thread,NULL,task,NULL);
  18.     while(1)
  19.     {
  20.     }
  21.    
  22.     return 0;
  23. }
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册