#include "stdafx.h" #include <iostream> using namespace std; #include <windows.h> #include <process.h> CRITICAL_SECTION cs; //1.測試同一線程兩次EnterCriticalSection會不會阻塞 //答案:不會 /* int _tmain(int argc, _TCHAR* argv[]) { InitializeCriticalSection(&cs); EnterCriticalSection(&cs); EnterCriticalSection(&cs); for(int i = 0;i < 20;i++) { cout<<"MainThread:"<<i<<endl; Sleep(1000); } LeaveCriticalSection(&cs); DeleteCriticalSection(&cs); system("pause"); return 0; } */ //2.測試同一線程兩次EnterCriticalSection,調用一次LeaveCriticalSection 另一個線程是否可以以EnterCriticalSection //答案:不可以 兩次EnterCriticalSection 必須調用 LeaveCriticalSection兩次 unsigned __stdcall ThreadPorc ( void * ) { for(int i = 0;i<20;i++) { EnterCriticalSection(&cs); cout<<"線程2進入"<<endl; break; LeaveCriticalSection(&cs); Sleep(1000); } return 0; } int _tmain(int argc, _TCHAR* argv[]) { InitializeCriticalSection(&cs); EnterCriticalSection(&cs); EnterCriticalSection(&cs); _beginthreadex(NULL,0,ThreadPorc,NULL,0,NULL); for(int i = 0;i < 20;i++) { if(i == 10) { LeaveCriticalSection(&cs); } cout<<"MainThread:"<<i<<endl; Sleep(1000); } LeaveCriticalSection(&cs); Sleep(5000); DeleteCriticalSection(&cs); system("pause"); return 0; }