#include
#include
DWORD WINAPI Fun1Proc(LPVOID lpParameter);
DWORD WINAPI Fun2Proc(LPVOID lpParameter);
DWORD WINAPI Fun3Proc(LPVOID lpParameter);
CRITICAL_SECTION g_cs;
int tickets=15;
void main()
{
HANDLE hThread1;
HANDLE hThread2;
HANDLE hThread3;
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,CREATE_SUSPENDED,NULL);
SetThreadPriority(hThread1,THREAD_PRIORITY_HIGHEST);
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,CREATE_SUSPENDED,NULL);
SetThreadPriority(hThread2,THREAD_PRIORITY_NORMAL);
hThread3=CreateThread(NULL,0,Fun3Proc,NULL,CREATE_SUSPENDED,NULL);
SetThreadPriority(hThread3,THREAD_PRIORITY_IDLE);
ResumeThread(hThread1);
ResumeThread(hThread2);
ResumeThread(hThread3);
WaitForSingleObject(hThread1,INFINITE);
// SetThreadPriority(hThread3,IDLE_PRIORITY_CLASS);
CloseHandle(hThread1);
CloseHandle(hThread2);
CloseHandle(hThread3);
DeleteCriticalSection(&g_cs);
}
DWORD WINAPI Fun1Proc(LPVOID lpParameter){
Sleep(20);
while(TRUE)
{
EnterCriticalSection(&g_cs);
if(tickets>-5)
{
// Sleep(1);
cout<<"thread1 sell ticket:"<<tickets--<<endl;
}
else
break;
LeaveCriticalSection(&g_cs);
}
return 0;
}
DWORD WINAPI Fun2Proc(LPVOID lpParameter){
InitializeCriticalSection(&g_cs);
while(TRUE)
{
EnterCriticalSection(&g_cs);
if(tickets>0)
{
// Sleep(1);
cout<<"thread2 sell ticket:"<<tickets--<<endl;
}
else
break;
if(tickets==5)LeaveCriticalSection(&g_cs);
}
return 0;
}
DWORD WINAPI Fun3Proc(LPVOID lpParameter){
cout<<"线程3开始运行!"<<endl;
return 0;
}