반응형
테스트용
비록 올바른 사용 예는 아닐 수 있지만 사용법 숙달을 위해..
비록 올바른 사용 예는 아닐 수 있지만 사용법 숙달을 위해..
#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);
}
반응형
'프로그래밍 > C & C++' 카테고리의 다른 글
| c++로 작성한 간단한 multi level queue (0) | 2022.01.08 |
|---|---|
| c++로 작성한 간단한 pool (0) | 2022.01.08 |
| [Effective C++] class를 사용할 때 초기화와 대입은 다르다 (0) | 2021.12.19 |
| struct 선언과 typedef (0) | 2007.03.31 |
댓글