프로그래밍/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);
}
반응형