프로그래밍/C & C++
[C/VC] 간단한 Critical Section 테스트
체리
2011. 3. 6. 16:40
반응형
테스트용
비록 올바른 사용 예는 아닐 수 있지만 사용법 숙달을 위해..
비록 올바른 사용 예는 아닐 수 있지만 사용법 숙달을 위해..
#include <stdio.h> #include <windows.h> #include <process.h> // 쓰레드 함수 void threadTest1(void* param); void threadTest2(void* param); // 계산 함수 void cal(int num); // 테스트 숫자 static int maxCnt = 20; // 계산 결과를 저장 static int result = 0; // Critical section Variable CRITICAL_SECTION cs; // 메인 함수 int main(void) { // 초기화 InitializeCriticalSection(&cs); int i; for(i = 0; i < 5; i++) { // 변수 초기화 result = 0; // 쓰레드 시작 HANDLE handles[2]; handles[0] = (HANDLE)_beginthread(threadTest1, 0, NULL); handles[1] = (HANDLE)_beginthread(threadTest2, 0, NULL); // 쓰레드가 모두 종료될 때까지 대기 WaitForMultipleObjects(2, handles, TRUE, INFINITE); // 결과 출력 printf("계산 결과: %d\n", result); } return 0; } // 쓰레드 함수 구현 void threadTest1(void* param) { int loopcnt = 0; do { cal(1); Sleep(1); } while(maxCnt > ++loopcnt); _endthread(); } void threadTest2(void* param) { int loopcnt = 0; do { cal(2); Sleep(1); } while(maxCnt > ++loopcnt); _endthread(); } // 계산 함수 void cal(int num) { int tmp = 0; EnterCriticalSection(&cs); // 연산 tmp = result; tmp += num; Sleep(1); // 일부러 Context switching 해버릴 수도 있도록 result = tmp; LeaveCriticalSection(&cs); }
반응형