CriticalSection关键代码区(临界区)

#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;
}

  

原文地址:https://www.cnblogs.com/wucg/p/2415563.html