免费注册 查看新帖 |

Chinaunix

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

子线程当中的printf是否需要flush()? 否则会造成打印顺序错误? [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-21 09:45 |只看该作者 |倒序浏览
例如,一个main里面有若干个线程,每个线程都会调用printf。
问题: 这不是这些printf仍然是向同一个输出缓冲里面写东西。会不会线程1的printf正在写的过程中,线程2的printf覆盖了它,最后输出一个很奇怪的东西。

是不是需要printf之后flush标准输出来避免这种可能呢?

请大虾指点。谢谢!!!!!

论坛徽章:
0
2 [报告]
发表于 2010-09-21 09:50 |只看该作者
是向同一个输出写东西,不同线程的数据不会互相覆盖,但是会交错。要采用线程同步手段保证写入的原子性,如mutex。

论坛徽章:
0
3 [报告]
发表于 2010-09-21 09:51 |只看该作者
如果是带缓冲的流,是需要flush一下的

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
4 [报告]
发表于 2010-09-21 11:01 |只看该作者
是向同一个输出写东西,不同线程的数据不会互相覆盖,但是会交错。要采用线程同步手段保证写入的原子性,如 ...
l.darkfire 发表于 2010-09-21 09:50



这个解释很好"不会覆盖,但是会交错",谢谢!

论坛徽章:
0
5 [报告]
发表于 2010-09-25 16:45 |只看该作者
我记得stderr是不缓冲的,stdout会缓冲。
你试试直接fprintf到stderr看看

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
6 [报告]
发表于 2010-09-25 17:10 |只看该作者
我记得stderr是不缓冲的,stdout会缓冲。
你试试直接fprintf到stderr看看
kyrre 发表于 2010-09-25 16:45



    good. stderr不缓冲。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP