多线程设置分离线程的问题

chengxuzhu 2008-03-08 03:25:59
程序如下
#include<pthread.h>
#include <iostream>
#include <fstream>

using namespace std;

void* func(void *arg)
{
for(int i =0 ; i<5; i++)
cout << "--"<<i << endl;

pthread_exit(NULL);

return 0;
}
int
main(int argc, char **argv)
{

pthread_t threads[10];
pthread_attr_t tattr;
pthread_attr_init(&tattr);

void *arg;
//pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED);
//int ret = pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_JOINABLE);
int ret = pthread_attr_setdetachstate(&tattr,PTHREAD_CREATE_DETACHED);
cout << ret << endl;

for(int i=0; i < 10; ++i)
pthread_create(&threads[i], &tattr, func, arg);
/*
for(int i=0; i < 10; ++i)
pthread_join(threads[i],NULL);
*/


return 0;
}
为什么只要我设置了PTHREAD_CREATE_DETACHED以后,pthread_create()不能调用我的函数了呢?
...全文
413 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
chengxuzhu 2008-03-12
  • 打赏
  • 举报
回复
+++ding
babyvox1999 2008-03-12
  • 打赏
  • 举报
回复
楼主的程序设置PTHREAD_CREATE_DETACHED后并不是不能调用func而是你的主循环结束太快了,只要在return 0; 前面加上一个适当的sleep就能看到所有的打印信息
babyvox1999 2008-03-12
  • 打赏
  • 举报
回复
分离状态的函数为 pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate)。第二个参数可选为PTHREAD_CREATE_DETACHED(分离线程)和 PTHREAD _CREATE_JOINABLE(非分离线程)。这里要注意的一点是,如果设置一个线程为分离线程,而这个线程运行又非常快,它很可能在 pthread_create函数返回之前就终止了,它终止以后就可能将线程号和系统资源移交给其他的线程使用,这样调用pthread_create的线程就得到了错误的线程号。要避免这种情况可以采取一定的同步措施,最简单的方法之一是可以在被创建的线程里调用 pthread_cond_timewait函数,让这个线程等待一会儿,留出足够的时间让函数pthread_create返回。设置一段等待时间,是在多线程编程里常用的方法。
野男孩 2008-03-12
  • 打赏
  • 举报
回复
linux不懂的飘过~~
z_kris 2008-03-10
  • 打赏
  • 举报
回复
我不清楚 帮顶+等答案
chengxuzhu 2008-03-10
  • 打赏
  • 举报
回复
up again
chengxuzhu 2008-03-09
  • 打赏
  • 举报
回复
没有人回答吗?继续等待
chengxuzhu 2008-03-08
  • 打赏
  • 举报
回复
外加一个概念问题?
PTHREAD_CREATE_JOINABLE 是创建非分里线程,我的理解是下一个线程会等待上一个线程结束,所以用这种方法想单于是串行的解决问题。
PTHREAD_CREATE_DETACHED 是创建分离线程,不需要等待,相当于同时创建几个线程,并行的处理。

不知道这种理解对麻?

64,631

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧