输出结果乱七八糟,是不是因为我的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
[解决办法]
再回顾一下操作系统概念