为什么多线程下使用cout输出不能在屏幕见到?

yunzhongjian 2004-12-31 11:21:00
在多线程的环境下,如果多个线程输出,使用std的cout输出字符到屏幕时,有时输出根本不会出现在屏幕上,但程序的确执行过cout输出语句了。改使用printf就没有问题了。 为什么std的cout会这样呢?请大家赐教!

...全文
816 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
sct 2005-09-07
  • 打赏
  • 举报
回复
学习
idler 2005-01-10
  • 打赏
  • 举报
回复
cout << flush;?
不确定。SGI的库是线程安全的。
step_by_step 2005-01-10
  • 打赏
  • 举报
回复
你把cout换成cerr就可以了,不要用缓冲了
gateh 2005-01-10
  • 打赏
  • 举报
回复
cout << flush才强制把缓冲内容写到屏幕上. 试试看.
yunzhongjian 2005-01-10
  • 打赏
  • 举报
回复
To questionboy():“可能是你其它的地方出錯了”
我可以十分肯定:我的程序肯定是运行到cout语句了,并继续往下运行了,
在cout语前或后加上printf语句都能正常的看到输出。那么你指的出错还有其它什么的吗?
yunzhongjian 2005-01-10
  • 打赏
  • 举报
回复
To0 snow810211(阳光): cerr 也一样
yunzhongjian 2005-01-10
  • 打赏
  • 举报
回复
To questionboy():“某個線程可能對屏慕的buffer沒有寫的權限”,我在同一进程里面开的线程也会对屏幕的BUFFER没有写权限吗?

我的环境是: redhat linux 9.0 g++ 编译, GTK+-2.0。
pacman2000 2005-01-04
  • 打赏
  • 举报
回复
加了缓冲刷新的话,肯定是可以显示的,应该是你的程序出了什么问题。
xunfengxxx 2005-01-04
  • 打赏
  • 举报
回复
cout 不是线程安全的 要靠自己去线程同步 比较麻烦

printf是线程安全的 也就是自己做了线程同步的处理了
学习
questionboy 2005-01-04
  • 打赏
  • 举报
回复
不知道你是在甚麼環境下運行的,但是我可以肯定的告訴你,一定是可以顯示的,能否顯示與多線程沒有關係,可能是你其它的地方出錯了,仔細找找看吧,我碰到最多的問題(不加鎖)不過是線程之間同時要顯示信息,造成顯示的信息錯亂(混在一起,或者僅僅某一個信息被忽略).提示你一下,你的某個線程可能對屏慕的buffer沒有寫的權限,造成你的困惑
snow810211 2005-01-04
  • 打赏
  • 举报
回复
cerr试试看
whoho 2005-01-04
  • 打赏
  • 举报
回复
标准中没要求标准库的线程安全性,但是很多库实现已经加入了
这个支持,比如VC.net附加的库, 还有SGI版本

cout 没有输出更`可能是缓冲区的刷新问题

yunzhongjian 2005-01-04
  • 打赏
  • 举报
回复
我用了一个全局锁来锁住cout,即在cout前加锁,在endl后解锁,但是有些地方的输出仍然看不到。

piaozi2003() : cout << endl; 已经清除了缓冲
allen_zhaozhencn 2004-12-31
  • 打赏
  • 举报
回复
应该是thread safe的问题.STL的容器与算法都不是线程安全的.
piaozi2003 2004-12-31
  • 打赏
  • 举报
回复
清除缓冲
beyondtkl 2004-12-31
  • 打赏
  • 举报
回复
cout 不是线程安全的 要靠自己去线程同步 比较麻烦

printf是线程安全的 也就是自己做了线程同步的处理了
lu1172101275 2004-12-31
  • 打赏
  • 举报
回复
没碰过
oyljerry 2004-12-31
  • 打赏
  • 举报
回复
cout线程不是安全的,用printf

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧