thread_detach(threadid)和pthread_detach(pthread_self())

pthread_detach(threadid)和pthread_detach(pthread_self())有啥区别 [复制链接]
0 0

Rank: 1

帖子
484
主题
219
精华
0
可用积分
781
专家积分
0
在线时间
530 小时
注册时间
2007-07-14
最后登录
2014-07-10
论坛徽章:
0
跳转到指定楼层
1[收藏(0)][报告]
  发表于 2008-12-01 20:34:50  | 只看该作者  | 倒序浏览
pthread_create 后接着调用pthread_detach(threadid)后怎么好像阻塞了主线程,下面主线程的语句执行不了。另外pthread_attr_setdetachstate(&g_attr,PTHREAD_CREATE_DETACHED)又和这两个函数有啥区别。
 
   

Rank: 1

帖子
484
主题
219
精华
0
可用积分
781
专家积分
0
在线时间
530 小时
注册时间
2007-07-14
最后登录
2014-07-10
论坛徽章:
0
2[报告]
  发表于 2008-12-01 20:35:33  | 只看该作者
pthread_detach用在主函数和用在线程函数中有啥区别呢?
 
   

Rank: 8Rank: 8

帖子
11913
主题
291
精华
6
可用积分
25208
专家积分
439
在线时间
13570 小时
注册时间
2005-11-27
最后登录
2014-05-21
论坛徽章:
0
3[报告]
  发表于 2008-12-01 21:11:15  | 只看该作者
何不create的时候就指定detach参数?
欢迎访问学习虫社区--学习知识,分享知识!
www.xuexichong.com
 
   

Rank: 1

帖子
484
主题
219
精华
0
可用积分
781
专家积分
0
在线时间
530 小时
注册时间
2007-07-14
最后登录
2014-07-10
论坛徽章:
0
4[报告]
  发表于 2008-12-01 21:16:30  | 只看该作者
create的时候就指定detach参数和这些方法效果一样吧?pthread_detach用在主函数和用在线程函数中到底有啥区别呢?我看到有的用了pthread_create 后调用sleep,再调用pthread_detach,这又是什么意思呢,等主线程退出后,再调用pthread_detach释放资源?
 
   

Rank: 1

帖子
484
主题
219
精华
0
可用积分
781
专家积分
0
在线时间
530 小时
注册时间
2007-07-14
最后登录
2014-07-10
论坛徽章:
0
5[报告]
  发表于 2008-12-02 16:38:29  | 只看该作者
继续请教
 
   

Rank: 8Rank: 8

帖子
10856
主题
417
精华
4
可用积分
15017
专家积分
65
在线时间
8102 小时
注册时间
2005-05-26
最后登录
2014-07-25
论坛徽章:
1
2013新春纪念徽章日期:2013-01-21 17:33:35
6[报告]
  发表于 2008-12-02 16:40:55  | 只看该作者
调用的线程不同
echo '++++++++++[>++++++++++[>+<-]<-]>>-.+++++++.---------.++++++++.>>++++[<++++[<+>-]>-]<<+.-------..' | sed '
s/\([-+]\)/\1\1*p;/g
s/</p--;/g
s/>/p++;/g
s/\./putchar(*p);/g
s/\[/while(*p){/g
s/\]/}/g
1s/^/main(){char*p=calloc(1,6);/
$s/$/}/
/./!d'|gcc -xc - 2>/dev/null&&./a.out
 
   

Rank: 1

帖子
298
主题
38
精华
0
可用积分
317
专家积分
5
在线时间
77 小时
注册时间
2003-12-02
最后登录
2014-04-08
论坛徽章:
0
7[报告]
  发表于 2008-12-02 22:43:42  | 只看该作者
pthread_detach(threadid)和pthread_detach(pthread_self())没有什么区别吧!有很严格的区别吗???如果非要讲区别不可,我觉得应该是调用他们的线程不同~!
      pthread_detach(threadid)函数的功能是使线程ID为threadid的线程处于分离状态,一旦线程处于分离状态,该线程终止时底层资源立即被回收;否则终止子线程的状态会一直保存(占用系统资源)直到主线程调用pthread_join(threadid,NULL)获取线程的退出状态。
    通常是主线程使用pthread_create()创建子线程以后,一般可以调用pthread_detach(threadid)分离刚刚创建的子线程,这里的threadid是指子线程的threadid;如此以来,该子线程止时底层资源立即被回收;
    被创建的子线程也可以自己分离自己,子线程调用pthread_detach(pthread_self())就是分离自己,因为pthread_self()这个函数返回的就是自己本身的线程ID;

参考书籍:APUE 第12/13章 Page 287~311

友情PS:希望坛子里面的某些兄弟在回答问题之前自己要先搞清楚,不要自己都不搞清楚就乱说,还误导别人~!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值