배운 이론을 실습하는 과정
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <Windows.h>
#include <process.h>
#include <tchar.h>
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);
return 0;
}
int main()
{
//hEvent = CreateEventEx(0, L"MyEvent", 0, EVENT_ALL_ACCESS);
vector<HANDLE> eH;
for (int i = 0; i < 5; i++)
{
eH.push_back(
(HANDLE)_beginthreadex(0, 0, readValueProc, 0, 0, 0)
);
}
for (int i = 0; i < 5; i++)
{
eH.push_back(
(HANDLE)_beginthreadex(0, 0, writeValueProc, 0, 0, 0)
);
}
WaitForMultipleObjects(10, eH.data(), TRUE, INFINITE);
for (HANDLE h : eH)
CloseHandle(h);
//CloseHandle(hEvent);
return 0;
}
- 전역 변수 globalMemory가 있고, 그 값에 접근하는 두 함수가 있다.
- writeValueProc은 그 값에 100을 더한 후에 Event 객체를 시그널 상태로 변경한다.
- readValueProc은 WaitForSingleObject로 대기하다가 시그널을 받고 그 값을 읽어오는 함수다.
- 실험을 위해 Event 객체와 관련된 코드를 먼저 주석처리 해놓았다.
Event 객체를 사용하면?
- 주석을 해제한 후 다시 실행해보면 결과는 아래와 같다.
'운영체제 > [ecourse] Windows Programming' 카테고리의 다른 글
7-1. DllMain 기본 개념 (0) | 2022.09.21 |
---|---|
6-2-3. Critical Section 실습 (0) | 2022.09.20 |
6-2-1. Semaphore 실습 (0) | 2022.09.20 |
6-2. 동기화 개념과 Critical Section (1) | 2022.09.20 |
6-1. Thread Basic (0) | 2022.09.20 |
댓글