#include <windows.h>
#include <iostream.h>
DWORD WINAPI Fun1Proc(
LPVOID lpParameter //thread data
);
DWORD WINAPI Fun2Proc(
LPVOID lpParameter //thread data
);
int tickets = 100,num = 0;
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);//创建自动事件对象,初始状态设置为了非信号状态
Sleep(8000);
CloseHandle(g_hEvent);
}
DWORD WINAPI Fun1Proc(
LPVOID lpParameter //thread data
)
{
while(TRUE)
{
WaitForSingleObject(g_hEvent,INFINITE);//申请事件对象,是否有信号
//ResetEvent(g_hEvent);
if (tickets > 0){
Sleep(100);
num++;
cout << "thread1 sell ticket : " << tickets-- << endl;
}
else{
cout << num << endl;
break;
}
SetEvent(g_hEvent);
}
return 0;
}
DWORD WINAPI Fun2Proc(
LPVOID lpParameter //thread data
)
{
while(TRUE)
{
WaitForSingleObject(g_hEvent,INFINITE);
//ResetEvent(g_hEvent);
if (tickets > 0){
num++;
Sleep(1);
cout << "thread2 sell ticket : " << tickets-- << endl;
}
else{
cout << num << endl;
break;
}
SetEvent(g_hEvent);
}
return 0;
}