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