免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: wangxiaoguang
打印 上一主题 下一主题

[C] sleep和pthread_join的区别 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2008-09-03 13:37 |只看该作者
pthread_setspecific(key,(void *)&tid);



问题在这边。。。

这边设置这个KEY的时候错了。@。@

应该这么写:

pthread_setspecific(key,(void *)tid);



呼呼。。。其实这个KEY赋值上去应该是自己的TID才是正确的。我们缺把地址给赋值进去了@。@

相关还是看  这里

[ 本帖最后由 benbenr 于 2008-9-3 13:38 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
32 [报告]
发表于 2008-09-04 14:40 |只看该作者
原帖由 qliu00 于 2008-9-3 00:28 发表
sleep是使当前执行的线程(也就是主线程)睡眠,应该用usleep唤醒它

嗯,usleep => let me wake up he,
从这个角度讲,让你睡觉,就是“唤醒它”,还真没错。

论坛徽章:
0
33 [报告]
发表于 2008-09-04 14:44 |只看该作者
原帖由 flw 于 2008-9-4 14:40 发表

嗯,usleep => let me wake up he,
从这个角度讲,让你睡觉,就是“唤醒它”,还真没错。

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
34 [报告]
发表于 2008-09-04 16:53 |只看该作者
原帖由 benbenr 于 2008-9-3 13:37 发表



问题在这边。。。

这边设置这个KEY的时候错了。@。@

应该这么写:

pthread_setspecific(key,(void *)tid);


呼呼。。。其实这个KEY赋值上去应该是自己的TID才是正确的。我们缺把地址给赋值进 ...


为什么int tid可以转换成void*,pthread_getspecifc取出来的却是tid的值

论坛徽章:
0
35 [报告]
发表于 2008-09-04 16:54 |只看该作者
原帖由 flw 于 2008-9-4 14:40 发表

嗯,usleep => let me wake up he,
从这个角度讲,让你睡觉,就是“唤醒它”,还真没错。



估计是新版本的自动发帖程序有bug。。。

论坛徽章:
0
36 [报告]
发表于 2008-09-04 19:54 |只看该作者
原帖由 chenzhanyiczy 于 2008-9-4 16:53 发表


为什么int tid可以转换成void*,pthread_getspecifc取出来的却是tid的值


这边的void *是一个无类型的指针,任何类型都能转换成这个。应该就是存放这个所强制转换类型的地址。

不是在pthread_getspecific里获取,这个函数是把这个tid的值赋值给key。

在析构函数void echomsg(int t)这个里面的型参t就是key的值,是传递过来的。

论坛徽章:
0
37 [报告]
发表于 2008-09-07 14:57 |只看该作者
原帖由 benbenr 于 2008-9-3 13:09 发表



有没有发现:


在这里主线程的TID和实际的TID居然不一样。

我刚刚GDB了一下,在echomsg的这个函数的参数t,其实就是把主线程的TID给传入了进去。

莫非,在调用析构函数的时候就是把主线程的TID ...




“在这里主线程的TID和实际的TID居然不一样。":怎么不一样了,明明都是40041280
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP