免费注册 查看新帖 |

Chinaunix

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

关于linux线程的pthread_exit函数调用的问题 [复制链接]

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
11 [报告]
发表于 2009-10-20 18:00 |只看该作者

回复 #9 kouu 的帖子

恩,那么kouu的意思就是这句等同于return((void *)2),这句很好理解,就是你说的传递的就是2,所以拿到的也是2. 而如果pthread_exit的参数不是常量,那么就不能这样简单来看了,对吧? 具体说就必须看这个变量中到底存放的是什么值。

[ 本帖最后由 jiufei19 于 2009-10-20 18:01 编辑 ]

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
12 [报告]
发表于 2009-10-20 18:05 |只看该作者

回复 #10 weichongli 的帖子

sorry,应为apue: advanced  programing in the unix environment

论坛徽章:
0
13 [报告]
发表于 2009-10-20 18:13 |只看该作者
原帖由 jiufei19 于 2009-10-20 18:05 发表
sorry,应为apue: advanced  programing in the unix environment



……痛哭……又落伍了……


第一版的我有,不过里面没有写线程。我刚刚去瞅了一眼,这书有第二版并且有讲线程了,不过不是尤爷翻译的,不知道翻译的质量咋样,看那意思,你手里有第二版呗?给讲讲翻译质量好伐?

论坛徽章:
0
14 [报告]
发表于 2009-10-20 18:23 |只看该作者
原帖由 jiufei19 于 2009-10-20 18:00 发表
恩,那么kouu的意思就是这句等同于return((void *)2),这句很好理解,就是你说的传递的就是2,所以拿到的也是2. 而如果pthread_exit的参数不是常量,那么就不能这样简单来看了,对吧? 具体说就必须看这个变量中 ...


那么,如果:
int ret=2;
return ret;

return的也不是常量呢?不也是返回ret这个变量的值吗? 这有什么不妥的……

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
15 [报告]
发表于 2009-10-20 18:29 |只看该作者

回复 #13 weichongli 的帖子

翻译基本还好,不过我只看原文电子版的哈,呵呵

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
16 [报告]
发表于 2009-10-20 18:32 |只看该作者

回复 #14 kouu 的帖子

那么,如果:
int ret=2;
return ret;

return的也不是常量呢?不也是返回ret这个变量的值吗? 这有什么不妥的……
----------------------------------------------------------------------------------------


我晕哦,我就是在问这个问题呀  如果它就用return语句,那么我没有意见,但是它用了pthread_exit函数,并且该函数的参数声明了是一个指针(这个应该没有异议吧),所以才造成我的困惑呀

论坛徽章:
0
17 [报告]
发表于 2009-10-20 18:43 |只看该作者
原帖由 jiufei19 于 2009-10-20 18:29 发表
翻译基本还好,不过我只看原文电子版的哈,呵呵

牛淫,我走了……

论坛徽章:
0
18 [报告]
发表于 2009-10-20 19:01 |只看该作者
原帖由 jiufei19 于 2009-10-20 18:32 发表
那么,如果:
int ret=2;
return ret;

return的也不是常量呢?不也是返回ret这个变量的值吗? 这有什么不妥的……
---------------------------------------------------------------------------------- ...


thread_create()创建后马上就返回了,所以,线程的运行结果 需要phread_exit()传给pthread_join(),

如果线程要回传的结果是一个字符串,或者一个比较复杂的数据结构,那就只能靠传地址(也就是指针)这个比较通用的做法。pthread_join()获取地址后,去地址指定的内存区域去拿结果。

因为地址本身就是一个32位或者64位的整数,所以,可以把一个整数当成地址给传回来,但此时就不要把传回来的值当成地址用了,否则就segment fault了。

论坛徽章:
0
19 [报告]
发表于 2009-10-28 09:55 |只看该作者
原帖由 jiufei19 于 2009-10-20 17:15 发表
大家好,我在学习linux的线程编程时对线程的退出函数pthread_exit的调用参数的使用感到迷惑,敬请大家帮忙解惑。

pthread_exit(void *val); 根据aupe介绍,avl是线程退出时,退出码所保存的地方,因此在调用 ...



小弟不才,也来热闹一把。因为我是做java开发的,c功底一般,错误之处,还请指出。

pthread_exit((void *)0);

在这里,最关键地是“(void *)0”到底做了那些事情?

窃以为,(void *)0 等价于  int *  i;  int a =0; i=&a;

也就是说,这里并非是一个类型转换,而是初始化的动作。

论坛徽章:
0
20 [报告]
发表于 2009-10-28 10:25 |只看该作者
这么好的解释没人看,我自己顶
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP