#include <windows.h> #include <iostream> using namespace std; DWORD WINAPI MyThreadProc1(LPVOID lpParameter); //thread data DWORD WINAPI MyThreadProc2(LPVOID lpParameter); int tickets=100; CRITICAL_SECTION g_cs; int main(){ DWORD tid1=0,tid2=0; HANDLE handle1 = CreateThread(NULL,0,MyThreadProc1,NULL,CREATE_SUSPENDED ,&tid1); HANDLE handle2 = CreateThread(NULL,0,MyThreadProc2,NULL,CREATE_SUSPENDED ,&tid2); ResumeThread(handle1); ResumeThread(handle2); InitializeCriticalSection(&g_cs); Sleep(5000); DeleteCriticalSection(&g_cs); CloseHandle(handle1); CloseHandle(handle2); cout<< "SubThread1 ID:" << hex << uppercase<< tid1 << endl; cout<< "SubThread2 ID:" << hex << uppercase<< tid2 << endl; system("pause"); return 0; } DWORD WINAPI MyThreadProc1(LPVOID lpParameter ) { while(TRUE){ EnterCriticalSection(&g_cs); if(tickets){ cout<<"子线程1卖票:"<<tickets<<endl; --tickets; Sleep(15); LeaveCriticalSection(&g_cs); } else { LeaveCriticalSection(&g_cs); break; } } return 1; } DWORD WINAPI MyThreadProc2(LPVOID lpParameter) { while(TRUE){ EnterCriticalSection(&g_cs); if(tickets){ cout<<"子线程2卖票:"<<tickets<<endl; --tickets; Sleep(15); LeaveCriticalSection(&g_cs); } else { LeaveCriticalSection(&g_cs); break; } } return 1; }