首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

输出结果乱七八糟,是不是因为小弟我的cpu双核的原因

2012-04-25 
输出结果乱七八糟,是不是因为我的cpu双核的原因啊我的程序代码:#include iostream#include windows.h#

输出结果乱七八糟,是不是因为我的cpu双核的原因啊
我的程序代码:
#include <iostream>
#include <windows.h>
#include <fstream>
using   namespace   std;
DWORD   WINAPI   Fun1Proc(
    LPVOID   lpParameter
);
DWORD   WINAPI   Fun2Proc(
    LPVOID   lpParameter
);
int   ticket=100;
ofstream   fout( "F:\index.txt ",ios::out);
int   main()
{
HANDLE   hThread1;
HANDLE   hThread2;
hThread1=::CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2=::CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
::CloseHandle(hThread1);
::CloseHandle(hThread2);
Sleep(4000);
return   0;
}
DWORD   WINAPI   Fun1Proc(
    LPVOID   lpParameter
)
{
while(true)
{
if(ticket> 0)
fout < < "Fun1   sell " < < "\t " < <ticket-- < <endl;
else
break;
}
return   0;
}
DWORD   WINAPI   Fun2Proc(
    LPVOID   lpParameter
)
{
while(true)
{
if(ticket> 0)
fout < < "Fun2   sell " < < "\t " < <ticket-- < <endl;
else
break;
}
return   0;
}


输出结果:
Fun2   sellFun1   sell99100
Fun2   sellFun1   sell9897
Fun2   sellFun1   sell9695
Fun2   sellFun1   sell9493
Fun2   sell92
Fun2   sellFun1   sell9190
Fun2   sellFun1   sell8988
Fun2   sellFun1   sell8786
Fun2   sellFun1   sell8584
Fun2   sellFun1   sell8382
Fun2   sellFun1   sell8180
Fun2   sellFun1   sell7978
Fun2   sellFun1   sell7776
Fun2   sellFun1   sell7574
Fun2   sellFun1   sell7372
Fun2   sellFun1   sell7170
Fun2   sellFun1   sell6968
Fun2   sellFun1   sell6667
Fun1   sellFun2   sell6564
Fun1   sellFun2   sell6362
Fun1   sellFun2   sell6160
Fun1   sellFun2   sell5958
Fun1   sellFun2   sell5756
Fun1   sellFun2   sell5554
Fun1   sellFun2   sell5352
Fun1   sellFun2   sell5150
Fun1   sellFun2   sell4948
Fun1   sellFun2   sell4746
Fun1   sellFun2   sell4544
Fun1   sellFun2   sell4342
Fun1   sellFun2   sell4140
Fun1   sellFun2   sell3938
Fun1   sellFun2   sell3736
Fun1   sellFun2   sell3534
Fun1   sellFun2   sell3332
Fun1   sellFun2   sell3130
Fun1   sellFun2   sell2928
Fun1   sellFun2   sell2726
Fun1   sellFun2   sell2524
Fun1   sellFun2   sell2322
Fun1   sellFun2   sell2120
Fun1   sellFun2   sell1918
Fun1   sellFun2   sell1716
Fun1   sellFun2   sell1514
Fun1   sellFun2   sell1312
Fun1   sellFun2   sell1110
Fun1   sellFun2   sell98
Fun1   sellFun2   sell76
Fun1   sellFun2   sell54
Fun1   sellFun2   sell32
Fun1   sell1


[解决办法]
楼主的运行结果是完全正常的

要知道, CUP分配时间片是以线程为单位的, 而一个时间片用完, 全立即切换到另一个线程.

真正乱七八糟的情况应该是打印出两个相同的数值.


[解决办法]
想要打印:
Fun1 sell 33
Fun2 sell 32
这种的话, 自然要使用线程同步了.

[解决办法]
我只知道这个一定要用互斥锁的
[解决办法]
终于得到正确结果了,就是不知道为什么必须//use MFC as Shall DLL,才能连接成功。

#include <iostream>
//#include <windows.h>
#include <fstream>
#include <afxmt.h> //.h file
using namespace std;
DWORD WINAPI Fun1Proc(
LPVOID lpParameter
);
DWORD WINAPI Fun2Proc(
LPVOID lpParameter
);

CMutex mutex; /////////here

int ticket=100;

ofstream fout( "C:\\index.txt ",ios::out); /////here ofstream fout( "F:\index.txt ",ios::out)
int main()
{

HANDLE hThread1;
HANDLE hThread2;
hThread1=::CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2=::CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
::CloseHandle(hThread1);
::CloseHandle(hThread2);
Sleep(4000);
fout.close(); //随手关门
return 0;
}
DWORD WINAPI Fun1Proc(
LPVOID lpParameter
)
{
while(true)
{
mutex.Lock();////herer
if(ticket> 0){
fout < < "Fun1 sell " < < "\t " < <ticket-- < <endl;
mutex.Unlock(); ///herer
} else
break;
}
mutex.Unlock(); //here
return 0;
}
DWORD WINAPI Fun2Proc(
LPVOID lpParameter
)
{
while(true)
{
mutex.Lock();
if(ticket> 0) {
fout < < "Fun2 sell " < < "\t " < <ticket-- < <endl;
mutex.Unlock(); //here
} else
break;
}
mutex.Unlock(); //here
return 0;
}

[解决办法]
真的是用的2个线程么?lz的程序我运行了结果是这样


Fun1 sell100
Fun1 sell99
Fun1 sell98
Fun1 sell97
Fun1 sell96
Fun1 sell95
Fun1 sell94
Fun1 sell93
Fun1 sell92
Fun1 sell91
Fun1 sell90
Fun1 sell89
Fun1 sell88
Fun1 sell87
Fun1 sell86
Fun1 sell85
Fun1 sell84
Fun1 sell83
Fun1 sell82
Fun1 sell81
Fun1 sell80
Fun1 sell79
Fun1 sell78
Fun1 sell77
Fun1 sell76
Fun1 sell75
Fun1 sell74
Fun1 sell73
Fun1 sell72
Fun1 sell71
Fun1 sell70
Fun1 sell69
Fun1 sell68
Fun1 sell67
Fun1 sell66
Fun1 sell65
Fun1 sell64
Fun1 sell63
Fun1 sell62
Fun1 sell61
Fun1 sell60
Fun1 sell59
Fun1 sell58
Fun1 sell57
Fun1 sell56
Fun1 sell55
Fun1 sell54
Fun1 sell53
Fun1 sell52
Fun1 sell51
Fun1 sell50
Fun1 sell49
Fun1 sell48
Fun1 sell47
Fun1 sell46
Fun1 sell45
Fun1 sell44
Fun1 sell43
Fun1 sell42
Fun1 sell41
Fun1 sell40
Fun1 sell39
Fun1 sell38
Fun1 sell37
Fun1 sell36
Fun1 sell35
Fun1 sell34
Fun1 sell33
Fun1 sell32
Fun1 sell31
Fun1 sell30
Fun1 sell29
Fun1 sell28
Fun1 sell27
Fun1 sell26
Fun1 sell25
Fun1 sell24
Fun1 sell23
Fun1 sell22
Fun1 sell21
Fun1 sell20
Fun1 sell19
Fun1 sell18
Fun1 sell17


Fun1 sell16
Fun1 sell15
Fun1 sell14
Fun1 sell13
Fun1 sell12
Fun1 sell11
Fun1 sell10
Fun1 sell9
Fun1 sell8
Fun1 sell7
Fun1 sell6
Fun1 sell5
Fun1 sell4
Fun1 sell3
Fun1 sell2
Fun1 sell1


为什么全部都是Fun1 sell1?????
不是很明白什么意思。。。。。
[解决办法]
//赫赫 那是ticket=100太小了,你机器太快或对多线程支持不好,还没等Fun2调用,直接就结束了。
试下改大些肯定能看到效果了。

[解决办法]
C/C++高级群20641933
[解决办法]
up
[解决办法]
再回顾一下操作系统概念

热点排行