반응형
테스트용
비록 올바른 사용 예는 아닐 수 있지만 사용법 숙달을 위해..
비록 올바른 사용 예는 아닐 수 있지만 사용법 숙달을 위해..
#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 |
댓글