|
제가 궁금해하는 환경은 세마포어에서 스레드 개수를 1개 이상 즉 2개든 3개든 암튼 1개 이상으로 설정했을 경우
이구요...
지금 제가 혼동 스러워하는 부분은
뮤텍스, 크리티컬 섹션은 오직 한개의 쓰레드만 접근 가능하게 하는 구조라는 것은 오직 1개의 스레드만
임계영역에 접근 할 수 있다는 말씀 이신거죠??
제가 A, B라는 스레드를 만들었다고 가정했을 때 A라는 스레드가 임계영역에 접근을 했으면 B스레드는 A스레드의
작업이 완료될때까지 대기헀다가 A스레드의 작업이 끝나면 B스레드가 임계영역에 접근하는 그런 구조 아닌가요??
아래는 제가 뮤텍스 예제 만들어 본건데요..이런 형태로 사용하는거 아닌가요???
HANDLE createMutex = CreateMutex(NULL, FALSE, NULL);
void Func() {
WaitForSingleObject(createMutex , INFINITE);
std::cout << "실행 중" << std::endl;
ReleaseMutex(createMutex );
}
DWORD WINAPI Thread1(void *params)
{
Func();
return 1;
}
DWORD WINAPI Thread2(void *params)
{
Func();
return 1;
}
int main()
{
HANDLE threads[2];
hreads[0] = CreateThread(0, 0, Thread1, 0, 0, 0);
threads[1] = CreateThread(0, 0, Thread2, 0, 0, 0);
WaitForMultipleObjects(2, threads, TRUE, INFINITE);
CloseHandle(threads[0]);
CloseHandle(threads[1]);
CloseHandle(createMutex );
return 0;
}
그리고
세마포어는 동시 접근 할 수있는 쓰레스 개수를 지정할 수 있는 개념이라는 말씀은 세마포어로 설정할 떄 동시 접근
할수 있는 스레드의 개수를 3으로 설정했을 경우 3개의 스레드가 동시에 임계영역에 접근할 수 있다는 말씀 아닌가요?
위의 예제에서 Func()함수에 Thread1이 먼저 접근하고 작업이 종료되면 Thread2가 접근할 수 있는데 세마포어는
Thread1, Thread2 스레드가 동시에 Func()에 접근 가능한 개념 아닌가요???
|