Answer
||| 사전지식 |||
공유자원/ 임계영역/ race condition
세마포어
- 세마포어는 임계영역(critical section)을 가지는 2개 이상의 프로세스가 있어 race condition이 발생하는 경우를 대비하기 위한 공유자원 관리 방법이다. (프로그램 내에서 struct 구조체로 표현된다..)
세마포어에는 2가지 종류가 있다. Counting semaphore, Binary semaphore. 이때 binary semaphore를 뮤텍스(mutex)라고도 한다.
lock/ unlock
lock
: 현재 임계 구역에 들어갈 권한을 얻어옴. ( 만약 다른 프로세스/스레드가 임계 구역 수행 중이면 종료할 때까지 대기 ) ⇒ 내가 자원쓸거다~!!
unlock
: 현재 임계 구역을 모두 사용했음. ( 대기 중인 다른 프로세스/스레드가 임계 구역에 진입할 수 있음 ) ⇒ 나 다 썼다!! 다른놈아 자원써라~!!
세마포어와 뮤텍스는 뭐하는 애들인데?
공유자원의 동기화 문제를 해결하기 위한 관리 방법들임.
→ 세마포어/뮤텍스를 쓰더라도 데드락이 발생할 수 있음
세마포어/뮤텍스의 포커스는 자원의 동기화지, 데드락 처리가 아님.
세마포어 ⇒ Counting semaphore
세마포어란?
- 여러 개의 프로세스가 접근 가능한 공유자원을 관리하는 기법
- 공유자원에 여러 프로세스가 접근 가능하도록 허용할 때 사용한다.
어떻게?