Mutex와 Semaphore의 차이

안준성·2024년 8월 14일
0

OperatingSystem

목록 보기
21/22
post-thumbnail

뮤텍스와 세마포어를 보며
이 둘에 단수, 복수 차이 말고 어떤 차이가 있을까 궁금해졌다.
뮤텍스와 세마포어에 대한 기본적인 내용은 이전에 다뤘기 때문에
차이점에만 집중해서 알아보겠다.


Mutex와 Semaphore의 차이점

뮤텍스와 세마포어는 모두 멀티 스레드 혹은 멀티 프로세스 환경에서
공유 자원에 대한 접근을 제어하기 위해 사용된다.
하지만 그 목적과 동작 방식에서는 차이점을 가진다.

mutex의 사용 목적

뮤텍스는 동시에 하나의 스레드(혹은 프로세스)만
공유자원에 접근하게 끔 제어하여 race condition을 방지한다.
뮤텍스에는 소유자 개념이 있어서,
잠금을 건 스레드만이 잠금을 해제할 수 있다.

이 때문에 뮤텍스는 잘못된 순서로 호출하거나
잠금을 걸고 해제하지 않는 등,
잘못 사용했을 시 데드락 발생 위험이 높다.

semaphore의 사용 목적

세마포어는 뮤텍스와는 살짝 다른 목적을 가진다.
세마포어는 공유자원에 동시에 접근할 수 있는 스레드의 수를 제어하여,
접근의 최대 동시성을 제한하기 위해 사용된다.
또한 이 뿐 아니라 생산자-소비자 문제처럼
여러 스레드 간의 상호 의존적인 작업을 조율하는 데에도 사용될 수 있다.

세마포어는 뮤텍스처럼 단일 스레드만 접근할 수 있게 제한하지 않기 때문에,
race condition을 완전히 방지해주진 못한다.
이를 완전히 방지하려면 뮤텍스와 같은 더 강력한 동기화 장치가 추가로 필요하다.
세마포어는 단지 "race condition 방지에 도움을 줄 수 있음" 정도이다.

세마포어에는 소유자 개념이 없기 때문에,
wait를 호출한 스레드가 아니더라도 signal을 호출할 수 있다.
이로 인해 세마포어는 뮤텍스에 비해 데드락 발생 가능성이 낮다.

profile
안녕하세요 준갑습니성

0개의 댓글