배운 이론을 실습하는 과정
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <Windows.h>
#include <process.h>
#include <tchar.h>
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, 1, NULL);
return 0;
}
int main()
{
hSemaphore = CreateSemaphoreEx(0, 3, 3, L"Sema1", 0, SEMAPHORE_ALL_ACCESS);
vector<HANDLE> vH;
for (int i = 0; i < 5; i++)
{
vH.push_back(
(HANDLE)_beginthreadex(0, 0, threadProc, 0, 0, 0)
);
}
WaitForMultipleObjects(5, vH.data(), TRUE, INFINITE);
for (HANDLE h : vH)
CloseHandle(h);
CloseHandle(hSemaphore);
return 0;
}
- 실제로 여러 쓰레드로 동시에 작업했을 때, 생각한 대로 작동하는지 연습해보았다.
- 세마포어를 만들고 카운트 3개, 리밋 3개를 걸어두었다.
- 핸들을 동적 배열 vector에 담고 쓰레드를 5개를 만들어서 돌린다.
- 생각대로라면 쓰레드 함수에선 3초동안 Sleep하므로 3개가 먼저 실행되고 3초 후 나머지 2개가 실행되어야 한다.
'운영체제 > [ecourse] Windows Programming' 카테고리의 다른 글
6-2-3. Critical Section 실습 (0) | 2022.09.20 |
---|---|
6-2-2. Event 실습 (0) | 2022.09.20 |
6-2. 동기화 개념과 Critical Section (1) | 2022.09.20 |
6-1. Thread Basic (0) | 2022.09.20 |
5-4. Stack Memory (0) | 2022.09.19 |
댓글