免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1784 | 回复: 4
打印 上一主题 下一主题

[学习] 线程缓冲区的问题 [复制链接]

论坛徽章:
1
巨蟹座
日期:2014-04-23 23:20:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-04-02 23:12 |只看该作者 |倒序浏览
本帖最后由 registcn 于 2014-04-03 09:16 编辑
  1. #include <pthread.h>

  2. pthread_t id;

  3. void printid(char *s){
  4. printf("%s pid %u,tid %u\n",s,getpid(),pthread_self());
  5. }

  6. void * pself(void * arg){
  7. printid("new:");
  8. return ((void *)0);
  9. }

  10. int main(void){
  11. pthread_create(&id,NULL,pself,NULL);
  12. printid("old:");
  13. //sleep(1);
  14. exit(0);
  15. }
复制代码
问题1)
当printf语句没有\n结束时候,打印出来
old zzzz
new xxxx
有了\n就打印出
old zzzz
new xxxx
new xxxx
为啥多一行呢?

这是仿照apue11-1写的程序,发现比原代码少一行sleep(1),如果加上,那么即使带\n,输出也是两行了。
初学多线程,这其中奥秘是啥?

问题2)
APUE讲linux用clone实现线程,线程应有独立pid,但是我测出来pid都是一样的?何解?

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
2 [报告]
发表于 2014-04-03 10:14 |只看该作者
1,你主线程都不join子线程, 子线程有机会打印吗。
2,线程的pid用gettid。

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
3 [报告]
发表于 2014-04-03 11:13 |只看该作者
这是仿照apue11-1写的程序,发现比原代码少一行sleep(1),如果加上,那么即使带\n,输出也是两行了。
初学多线程,这其中奥秘是啥?

麻烦先规范代码,sleep或pthread_join,让线程时序确定后,再谈论输出。

APUE讲linux用clone实现线程,线程应有独立pid,但是我测出来pid都是一样的?何解?

现在符合标准的实现都是一样的pid,别纠结陈年旧事了。

论坛徽章:
1
巨蟹座
日期:2014-04-23 23:20:17
4 [报告]
发表于 2014-04-04 11:20 |只看该作者
能否解释下 不加sleep情况下,\n和不加\n的问题?感觉和多进程的缓冲区问题很类似
回复 3# timespace


   

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
5 [报告]
发表于 2014-04-04 12:00 |只看该作者
回复 4# registcn
不加sleep或pthread_join,线程执行顺序都不确定,不好重现问题,其实解释也没什么意义。


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP