为什么在我机器上结果不一样?

hyq1986 2010-02-06 10:59:32
加精
程序很简单:
#include <boost/thread.hpp>
#include <iostream>
using namespace std;
using namespace boost;

void HelloWorld()
{
char* pc = "Hello World!";
do
{
cout <<*pc;
}while(*pc++);
cout <<endl;
}

void NormalFunThread()
{
thread loThread1(HelloWorld);
thread loThread2(HelloWorld);
HelloWorld();

Sleep(100);
}

int main()
{
NormalFunThread();

return 0;
}

是从别人帖子里抄来的。帖子说运行结果类似这样:
HHeellloHl eoWl olWrool rdWl!od
l d
!

可是在我机器上,是这样:
Hello World!
Hello World!
Hello World!


这是为什么?是因为我的机器不是多核的原因么?
好多类似的多线程例程,我都跑出个与书上大不同的结果。

谢谢!
...全文
1259 134 打赏 收藏 转发到动态 举报
写回复
用AI写文章
134 条回复
切换为时间正序
请发表友善的回复…
发表回复
mathe 2010-03-04
  • 打赏
  • 举报
回复
结果很正常。操作系统切换进程不会那么频繁的。
可以试一下

void HelloWorld()
{
char* pc = "Hello World!";
do
{
cout < <*pc;
sleep(0);
}while(*pc++);
cout < <endl;
}
hyq1986 2010-03-04
  • 打赏
  • 举报
回复
我用这个代码在Linux下试了几遍:
#include <boost/thread.hpp>
#include <iostream>
#include <unistd.h>

using namespace std;
using namespace boost;

void Go() {
for( int i=0; i<100000; ++i ) {
cout << i << " ";
}
cout << endl;
}

void Thread() {
thread thread1(Go);
thread thread2(Go);
}

int main() {
Thread();
sleep(20);
return 0;
}

的确如大家所说,现在的机器太快了,线程还没切换就完成了。

之前,我有怀疑stdin是线程安全的。现在看来,至少我这个Linux不是。

另外,我之前在Windows上也没看到线程切换,不知道什么原因,待测试。
G_cofa 2010-03-03
  • 打赏
  • 举报
回复
那个帖子里面其实想说的是,输出是混乱的,虽然开了两个线程,可是这一个线程的执行时间过短,
建议在 do-while外面包一层大for loop 试试。
TossShinHwa 2010-03-02
  • 打赏
  • 举报
回复
看不懂.学习.````
shuijing6161211 2010-03-02
  • 打赏
  • 举报
回复
路过哦 踩踩顶一下顶一下顶一下顶一下顶一下
iceman5555 2010-03-02
  • 打赏
  • 举报
回复
也许是线程的问题吧。
gjh383582705 2010-03-02
  • 打赏
  • 举报
回复
这个我也不是很清楚哦
dadaipi 2010-03-02
  • 打赏
  • 举报
回复
学习啊,学习! 学习啊,学习!
wangtys510 2010-03-02
  • 打赏
  • 举报
回复
感谢楼主分享。。。。。。。
别人家的老公 2010-03-02
  • 打赏
  • 举报
回复
电脑内核处理速度决定多线程的运行,双核明显要比单核运行的效率高,那么比如线程1,2,3;可能1和2同时运行,1结束的时候,2还没结束,3就开始了,所以会造成你那个结果

很多书本版本比较老,都是以当时的机器配置来表现的,现在机器配置飙升,有这样的结果很正常
guoyangg 2010-03-02
  • 打赏
  • 举报
回复
热点人物:王菲、小虎队、赵本山
  对于观众关注的港台演员,金越表示,王菲、容祖儿、王力宏、陈奕迅、小虎队以及来自澳门的音乐人兼歌手余翠芝都在参演之列。   淡出歌坛6年的王菲将在今年春晚舞台演绎由原水木年华组合成员李健创作的歌曲《传奇》。《爱》《蝴蝶飞》《青苹果乐园》等这些曾在20年前红遍全国的校园歌曲也将以“串烧”的形式被“小虎队”重新演绎。   金越表示,语言类节目是10个,略多于往年。关于赵本山等出演的小品《捐助》的具体情节,金越笑着说,还是给老百姓大年三十晚上留一点乐趣吧。根据网络流传的说法,赵本山将继续戴上招牌式的帽子,穿上与《不差钱》里几乎一样、款式土气的上衣,携包括王小利、小沈阳在内的多位徒弟,共同演绎一段因捐款产生误会而引出的一场闹剧。   今年语言类节目有新人新作品,比如贾玲、白凯南表演的男女相声《大话捧逗》,效果就很不错。   冯巩、阎学晶、邵峰等出演的相声剧《不能让他走》,蔡明、郭达等出演的小品《家有毕业生》,殷桃、闫妮等出演的小品《我心飞翔》,黄宏、巩汉林等出演的小品《两毛一脚》等都将在除夕夜为观众带来欢笑。另外,去年春晚有出色表现的刘谦将再次展现近景魔术表演的魅力。
shiwenlu518 2010-03-01
  • 打赏
  • 举报
回复
帮顶················
shuihen 2010-03-01
  • 打赏
  • 举报
回复
多线程的每次编译 正常的
zhuolanji 2010-03-01
  • 打赏
  • 举报
回复
以前也遇到过·········
lstnn 2010-03-01
  • 打赏
  • 举报
回复
我也遇到过,和当时电脑的运行环境有关系
fldx 2010-03-01
  • 打赏
  • 举报
回复
和编译器有一定关系,我用VC6是乱序的, 用VS2008则是正序的,同一台机器上的执行结果。
wwsswwssww 2010-03-01
  • 打赏
  • 举报
回复
fdfffffffffffffff
shijingchen 2010-03-01
  • 打赏
  • 举报
回复
同情.....同情.....同情.....同情.....同情.....同情.....
哈拉木托 2010-03-01
  • 打赏
  • 举报
回复
我也学习学习,c语言我还行
hunhun133 2010-02-28
  • 打赏
  • 举报
回复
我今天也遇到了。要疯了
加载更多回复(111)

566

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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