본문 바로가기

전체 글339

6-2-3. Critical Section 실습 #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include using namespace std; CRITICAL_SECTION cs; int totalCount = 0; UINT threadProc(void* p) { totalCount++; int count = totalCount; static int value = 0; printf("%d번째 쓰레드 진입.. value = %d\n", count, value); EnterCriticalSection(&cs); for (int i = 0; i < 100; i++) value += 1; LeaveCriticalSection(&cs); printf("\t%d번째 쓰레드 종료.. .. 2022. 9. 20.
6-2-2. Event 실습 배운 이론을 실습하는 과정 #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include using namespace std; int globalMemory = 0; HANDLE hEvent = INVALID_HANDLE_VALUE; UINT writeValueProc(void* p) { static int increase = 100; globalMemory += increase; SetEvent(hEvent); return 0; } UINT readValueProc(void* p) { //WaitForSingleObject(hEvent, INFINITE); printf("read value : %d\n", globalMemory.. 2022. 9. 20.
6-2-1. Semaphore 실습 배운 이론을 실습하는 과정 #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include using namespace std; HANDLE hSemaphore = INVALID_HANDLE_VALUE; int totalCount = 0; UINT threadProc(void* p) { totalCount++; int count = totalCount; WaitForSingleObject(hSemaphore, INFINITE); printf("Start Routine %d!\n", count); Sleep(3000); printf("End Routine %d!\n", count); ReleaseSemaphore(hSemaphore,.. 2022. 9. 20.
6-2. 동기화 개념과 Critical Section Critical Section n개의 쓰레드가 공통적인 변수(정적 혹은 전역)를 조작할 때 이 조작하는 공간은 1개의 쓰레드만 지나가야 한다 라고 정해놓은 게 임계영역(Critical Section)이다. 여러 흐름이 일렬로 지나가는 것이므로 직렬화 (Serialize) 된다고도 얘기한다. #define _CRT_SECURE_NO_WARNINGS #include #include #include #include using namespace std; CRITICAL_SECTION cs; UINT __stdcall foo(void* p) { static int n = 0; EnterCriticalSection(&cs); //n = 100; //임계영역 (Critical Section) LeaveCritical.. 2022. 9. 20.