线程同步技术一:Critical Section的使用

critical section 称为代码关键段或者临界区域,它并不是核心对象,不是属于操作系统维护的而是属于进程维护的,用它可以解决多线程同步技术。代码如下:控制台程序模拟卖票系统

#include <windows.h> #include <iostream> using namespace std; DWORD WINAPI Fun1Proc( LPVOID lpParameter // thread data ); DWORD WINAPI Fun2Proc( LPVOID lpParameter // thread data ); int index=0; int tickets=100; CRITICAL_SECTION critical_sec; //定义关键区域 void main() { HANDLE hThread1; HANDLE hThread2; InitializeCriticalSection(&critical_sec); //初始化关键区域 hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL); hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL); CloseHandle(hThread1); CloseHandle(hThread2); Sleep(4000); } DWORD WINAPI Fun1Proc( LPVOID lpParameter // thread data ) { while(TRUE) { EnterCriticalSection(&critical_sec); //进入关键代码区域 if(tickets>0) { Sleep(1); cout<<"thread1 sell ticket : "<<tickets--<<endl; } else break; LeaveCriticalSection(&critical_sec); //离开代码关键区域 } return 0; } DWORD WINAPI Fun2Proc( LPVOID lpParameter // thread data ) { while(TRUE) { EnterCriticalSection(&critical_sec); //进入关键代码区域 if(tickets>0) { Sleep(1); cout<<"thread2 sell ticket : "<<tickets--<<endl; } else break; LeaveCriticalSection(&critical_sec); //离开代码关键区域 } return 0; }

 

主要使用的几个函数是:InitializeCriticalSection(&critical_sec);

                               EnterCriticalSection(&critical_sec);

                               LeaveCriticalSection(&critical_sec);

 

 

你可能感兴趣的:(线程同步技术一:Critical Section的使用)