1 函数
VOID InitializeCriticalSection( LPCRITICAL_SECTION lpCriticalSection // critical section ); 初始化一个临界区对象
lpCriticalSection 指向critical_section的指针
VOID EnterCriticalSection( LPCRITICAL_SECTION lpCriticalSection // critical section );进入临界区
VOID LeaveCriticalSection( LPCRITICAL_SECTION lpCriticalSection // critical section );离开临界区VOID DeleteCriticalSection( LPCRITICAL_SECTION lpCriticalSection // critical section );删除临界区#include<windows.h> #include<iostream> using namespace std; CRITICAL_SECTION g_cs; int tickets = 100; DWORD WINAPI ThreadProc1(LPVOID lpParameter); DWORD WINAPI ThreadProc2(LPVOID lpParameter ); int main() { HANDLE handle1; HANDLE handle2; handle1 = CreateThread(NULL,0,ThreadProc1,NULL,0,NULL); handle2 = CreateThread(NULL,0,ThreadProc2,NULL,0,NULL); CloseHandle(handle1); CloseHandle(handle2); InitializeCriticalSection(&g_cs); Sleep(4000); DeleteCriticalSection(&g_cs); return 0; } DWORD WINAPI ThreadProc1(LPVOID lpParameter) { while(1) { EnterCriticalSection(&g_cs); Sleep(3); if(tickets>0) cout<<"thread1 sell:"<<tickets--<<endl; else break; LeaveCriticalSection(&g_cs); } return 0; } DWORD WINAPI ThreadProc2(LPVOID lpParameter) { while(1) { EnterCriticalSection(&g_cs); Sleep(3); if(tickets>0) cout<<"thread2 sell:"<<tickets--<<endl; else break; LeaveCriticalSection(&g_cs); } return 0; }
互斥对象,事件对象,和临界区的区别互斥对象 和 事件对象 是系统内核对象 ,进行线程同步,速度慢,但可以在多个进程的多个线程间进行同步临界区,同步速度快,但容易产生死锁