64,686
社区成员
发帖
与我相关
我的任务
分享
#include <WINDOWS.H>
#include <IOSTREAM>
using namespace std;
/*
* 在单核单CPU下正常运行
*/
DWORD WINAPI Fun1Proc(LPVOID lpParameter);
DWORD WINAPI Fun2Proc(LPVOID lpParameter);
int tickets = 100;
HANDLE g_hEvent;
void main()
{
HANDLE hThread1,hThread2;
hThread1 = CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2 = CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
g_hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
SetEvent(g_hEvent);
Sleep(4000);
CloseHandle(g_hEvent);
}
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
while(TRUE)
{
WaitForSingleObject(g_hEvent,INFINITE);
//ResetEvent(g_hEvent);
if (tickets > 0)
{
Sleep(1);
cout<<"Thread1 sell ticket:"<<tickets--<<endl;
}
else
break;
SetEvent(g_hEvent);
}
return 0;
}
DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
while(TRUE)
{
WaitForSingleObject(g_hEvent,INFINITE);
//ResetEvent(g_hEvent);
if (tickets > 0)
{
Sleep(1);
cout<<"Thread2 sell ticket:"<<tickets--<<endl;
}
else
break;
SetEvent(g_hEvent);
}
return 0;
}
#include <WINDOWS.H>
#include <IOSTREAM>
using namespace std;
/*
* 在单核单CPU下正常运行
*/
DWORD WINAPI Fun1Proc(LPVOID lpParameter);
DWORD WINAPI Fun2Proc(LPVOID lpParameter);
int tickets = 100;
HANDLE g_hEvent;
void main()
{
g_hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
SetEvent(g_hEvent);
HANDLE hThread1,hThread2;
hThread1 = CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2 = CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
//g_hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
//SetEvent(g_hEvent);
Sleep(4000);
CloseHandle(g_hEvent);
}
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
while(TRUE)
{
WaitForSingleObject(g_hEvent,INFINITE);
//ResetEvent(g_hEvent);
if (tickets > 0)
{
Sleep(1);
cout<<"Thread1 sell ticket:"<<tickets--<<endl;
}
else
break;
SetEvent(g_hEvent);
}
return 0;
}
DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
while(TRUE)
{
WaitForSingleObject(g_hEvent,INFINITE);
//ResetEvent(g_hEvent);
if (tickets > 0)
{
Sleep(1);
cout<<"Thread2 sell ticket:"<<tickets--<<endl;
}
else
break;
SetEvent(g_hEvent);
}
return 0;
}
#include <WINDOWS.H>
#include <IOSTREAM>
using namespace std;
/*
* 在单核单CPU下正常运行
*/
DWORD WINAPI Fun1Proc(LPVOID lpParameter);
DWORD WINAPI Fun2Proc(LPVOID lpParameter);
int tickets = 100;
HANDLE g_hEvent;
void main()
{
//g_hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
//SetEvent(g_hEvent);
HANDLE hThread1,hThread2;
hThread1 = CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2 = CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
g_hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
SetEvent(g_hEvent);
Sleep(4000);
CloseHandle(g_hEvent);
}
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
while(TRUE)
{
if(WAIT_FAILED ==WaitForSingleObject(g_hEvent,INFINITE))
{
CHAR szBuf[80];
DWORD dw = GetLastError();
sprintf(szBuf,"WaitForSingleObject is fail,ErrorNo. is %u\n",dw);
printf(szBuf);
break;
}
//ResetEvent(g_hEvent);
if (tickets > 0)
{
Sleep(1);
cout<<"Thread1 sell ticket:"<<tickets--<<endl;
}
else
break;
SetEvent(g_hEvent);
}
return 0;
}
DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
while(TRUE)
{
if(WAIT_FAILED ==WaitForSingleObject(g_hEvent,INFINITE))
{
CHAR szBuf[80];
DWORD dw = GetLastError();
sprintf(szBuf,"WaitForSingleObject is fail,ErrorNo. is %u\n",dw);
printf(szBuf);
break;
}
//ResetEvent(g_hEvent);
if (tickets > 0)
{
Sleep(1);
cout<<"Thread2 sell ticket:"<<tickets--<<endl;
}
else
break;
SetEvent(g_hEvent);
}
return 0;
}
#include <iostream>
#include <windows.h>
using namespace std;
/*
* 在多核单CPU,多核多CPU下正常运行
*/
DWORD WINAPI Fun1Proc(LPVOID lpParameter);
DWORD WINAPI Fun2Proc(LPVOID lpParameter);
int tickets = 100;
HANDLE g_hEvent;
//CCriticalSection g_clsCriticalSection;
void main()
{
HANDLE hThread1,hThread2;
hThread1 = CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2 = CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
g_hEvent = CreateEvent(NULL,FALSE,TRUE,NULL);
//SetEvent(g_hEvent);
WaitForSingleObject(hThread1,INFINITE);
WaitForSingleObject(hThread2,INFINITE);
Sleep(4000);
//CloseHandle(g_hEvent);
}
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
while(TRUE)
{
WaitForSingleObject(g_hEvent,INFINITE);
//ResetEvent(g_hEvent);
//g_clsCriticalSection.Lock();
if (tickets > 0)
{
Sleep(1);
cout<<"Thread1 sell ticket:"<<tickets--<<endl;
}
else
break;
//g_clsCriticalSection.Unlock();
SetEvent(g_hEvent);
}
return 0;
}
DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
while(TRUE)
{
WaitForSingleObject(g_hEvent,INFINITE);
//ResetEvent(g_hEvent);
//g_clsCriticalSection.Lock();
if (tickets > 0)
{
Sleep(1);
cout<<"Thread2 sell ticket:"<<tickets--<<endl;
}
else
break;
//g_clsCriticalSection.Unlock();
SetEvent(g_hEvent);
}
return 0;
}