线程的属性
线程的属性练习设计一个程序,要求在程序中创建两条子线程,主线程创建一个线程的属性对象,并对线程的属性对象进行初始化之后,要求创建的子线程的属性设置为分离属性,子线程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]
2