#include <windows.h>
#include <iostream>
using namespace std ;
DWORD WINAPI ThreadProc1(
LPVOID lpParameter // thread data
);
DWORD WINAPI ThreadProc2(
LPVOID lpParameter // thread data
);
int index = 0 ;
int tikets = 100 ;
int main ()
{
HANDLE hThread1 ;
HANDLE hThread2 ;
hThread1 = CreateThread (NULL, 0, ThreadProc1, NULL, 0, NULL) ;
hThread2 = CreateThread (NULL, 0, ThreadProc2, NULL, 0, NULL) ;
CloseHandle (hThread1) ;
CloseHandle (hThread2) ;
Sleep (2000) ;
//while (index ++ < 100)
//cout << "main Thread is running =====================" << endl ;
return 0 ;
}
DWORD WINAPI ThreadProc1(
LPVOID lpParameter // thread data
)
{
while (TRUE)
{
if (tikets > 0)
cout << "ThreadProc1 sell tiket: " << tikets -- << endl ;
else
break ;
}
return 0 ;
}
DWORD WINAPI ThreadProc2(
LPVOID lpParameter // thread data
)
{
while (TRUE)
{
if (tikets > 0)
cout << "ThreadProc2 sell tiket: " << tikets -- << endl ;
else
break ;
}
return 0 ;
}
什么输出很混乱:
ThreadProc1 sellThreadProc2 sell tiket: 100
Thread tiket: 99
ThreadPProc1 sell tiket: roc2 sell tiket: 998
ThreadProc1 sel7
ThreadProc2 selll tiket: 96
Thread tiket: 95
ThreadPProc1 sell tiket: roc2 sell tiket: 994
.................
正确的输出应该是一行输出一句啊,怎么我这里是这样啊,我用vc跟dev都出现混乱的现象.求高手帮我解决
#include <iostream>
using namespace std ;
DWORD WINAPI ThreadProc1(
LPVOID lpParameter // thread data
);
DWORD WINAPI ThreadProc2(
LPVOID lpParameter // thread data
);
int index = 0 ;
int tikets = 100 ;
int main ()
{
HANDLE hThread1 ;
HANDLE hThread2 ;
hThread1 = CreateThread (NULL, 0, ThreadProc1, NULL, 0, NULL) ;
hThread2 = CreateThread (NULL, 0, ThreadProc2, NULL, 0, NULL) ;
CloseHandle (hThread1) ;
CloseHandle (hThread2) ;
Sleep (2000) ;
//while (index ++ < 100)
//cout << "main Thread is running =====================" << endl ;
return 0 ;
}
DWORD WINAPI ThreadProc1(
LPVOID lpParameter // thread data
)
{
while (TRUE)
{
if (tikets > 0)
cout << "ThreadProc1 sell tiket: " << tikets -- << endl ;
else
break ;
}
return 0 ;
}
DWORD WINAPI ThreadProc2(
LPVOID lpParameter // thread data
)
{
while (TRUE)
{
if (tikets > 0)
cout << "ThreadProc2 sell tiket: " << tikets -- << endl ;
else
break ;
}
return 0 ;
}
什么输出很混乱:
ThreadProc1 sellThreadProc2 sell tiket: 100
Thread tiket: 99
ThreadPProc1 sell tiket: roc2 sell tiket: 998
ThreadProc1 sel7
ThreadProc2 selll tiket: 96
Thread tiket: 95
ThreadPProc1 sell tiket: roc2 sell tiket: 994
.................
正确的输出应该是一行输出一句啊,怎么我这里是这样啊,我用vc跟dev都出现混乱的现象.求高手帮我解决
简单的办法,临界区
#include <windows.h>
#include <iostream>
using namespace std ;
DWORD WINAPI ThreadProc1(
LPVOID lpParameter // thread data
);
DWORD WINAPI ThreadProc2(
LPVOID lpParameter // thread data
);
int index = 0 ;
int tikets = 100 ;
CRITICAL_SECTION cs;
int main ()
{
InitializeCriticalSection(&cs);
HANDLE hThread1 ;
HANDLE hThread2 ;
hThread1 = CreateThread (NULL, 0, ThreadProc1, NULL, 0, NULL) ;
hThread2 = CreateThread (NULL, 0, ThreadProc2, NULL, 0, NULL) ;
CloseHandle (hThread1) ;
CloseHandle (hThread2) ;
Sleep (2000) ;
DeleteCriticalSection(&cs);
//while (index ++ < 100)
//cout << "main Thread is running =====================" << endl ;
return 0 ;
}
DWORD WINAPI ThreadProc1(
LPVOID lpParameter // thread data
)
{
while (TRUE)
{
EnterCriticalSection(&cs);
if (tikets > 0)
cout << "ThreadProc1 sell tiket: " << tikets -- << '\n' ;
else
break ;
LeaveCriticalSection(&cs);
}
return 0 ;
}
DWORD WINAPI ThreadProc2(
LPVOID lpParameter // thread data
)
{
while (TRUE)
{
EnterCriticalSection(&cs);
if (tikets > 0)
cout << "ThreadProc2 sell tiket: " << tikets -- << '\n' ;
else
break ;
LeaveCriticalSection(&cs);
}
return 0 ;
}