Foundation/Operation
세마포어(Semaphore)와 뮤텍스(Mutex)
SKaSha
2019. 7. 3. 14:26
공유 되어 있는 자원에 프로세스 혹은 스레드가 접근하고자 할 때 한번에 하나의 프로세스가 접근 할 수 있도록 고안 된 것이 세마포어입니다.
세마포어
공유된 자원의 데이터를 경쟁적으로 사용하는 프로세스들의 행동을 조정하거나 동기화 하는 기술입니다.
예를 들어 어떤 운영체제의 리소스를 동시에 4개의 프로세스만 사용 할 수 있다고 할 때, 이 리소스를 가지고 경쟁하는 여러 프로세스간 우선순위 등을 고려하여 행동을 조정하는 기술입니다.
뮤텍스
공유된 자원의 데이터를 여러 쓰레드가 접근 하는 것을 막는 기술입니다.
공유 리소스에 대하여 locking과 unlocking을 통하여 임계 영역
을 가진 쓰레드들의 Running time이 서로 겹치지 않게 각각 단독으로 실행되게 하는 기술입니다.
임계 영역 (Critical Section)
다중 프로그래밍에서 여러 프로세스가 데이터를 공유하면서 수행될 때 각 프로세스에서 공유데이터에 접근하는 프로그램 코드부분을 말합니다.
세마포어와 뮤텍스 차이
- 세마포어는 뮤텍스가 될수 있지만, 뮤텍스는 세마포어가 될 수 없습니다.
- 뮤텍스는 상태가 0과 1(locking, unlocking)로 나뉘는 binary Semaphore입니다.
- 세마포어는 파일시스템 상 파일 형태로 존재하고 뮤텍스는 프로세스 범위입니다. (프로세스가 사라질 때 뮤텍스는 clean up 됩니다.)
- 세마포어는 소유할 수 없고 뮤텍스는 소유할 수 있습니다.
뮤텍스를 소유하고 있는 쓰레드는 해당 뮤텍스를 해제 할 수 있지만 세마포어는 소유하고 있지 않은 쓰레드도 이 세마포어를 해제 할 수 있습니다.