OS

CS OS 세마포어와 뮤텍스

차가운개발 2024. 10. 22. 22:08

 

세마포어와 뮤텍스는 동기화 도구로 여러 프로세스나 스레드가 동시에 공유 자원에 접근할 때 발생할 수 있는 문제를 방지하기 위해 사용된다. 동시성 제어에서 자원 접근을 조절하는데 사용된다.

 

ㅇ 세마포어

정의
세마포어는 특정 자원에 접근할 수 있는 스레드의 수를 제어하기 위한 동기화 기법이다. 정수 값으로 표현되며 이 값은 공유 자원의 사용 가능 개수를 나타낸다.

 

동작 원리

세마포어는 주로 두 가지 연산인 P() (wait) 와 V() (signal)를 통해 동작한다.

  • P()
    세마포어 값을 감소시켜 자원을 요청한다. 세마포어 값이 0 이하면 스레드는 대기상태가 된다.
  • V()
    세마포어 값을 증가시켜 자원을 반환하고 대기중인 스레드가 있으면 깨운다.

세마포어는 카운팅 세마포어와 이진 세마포어로 나눌 수 있다.

  • 카운팅 세마포어
    세마포어 값이 0 이상의 값을 가지며, 여러 스레드가 자원에 접근할 수 있도록 허용한다.
  • 이진 세마포어(바이너리 세마포어)
    세마포어 값이 0 또는 1만 가질 수 있어 뮤텍스와 유사하게 동작한다.

 

ㅇ 뮤텍스

정의

뮤텍스는 상호 배제를 위한 동기화 도구로, 공유 자원에 대한 단독 접근을 보장한다. 한 번에 하나의 스레드만 뮤텍스를 획득할 수 있다.

 

동작 원리

뮤텍스는 잠금(lock)과 해제(Unlock) 두 가지 연산을 사용하여 동작한다.

  • 잠금(Lock)
    뮤텍스를 잠궈 다른 스레드가 자원에 접근하지 못하도록 한다. 뮤텍스가 이미 잠긴 상태라면 스레드는 대기 상태가된다.
  • 해제(Unlock)
    뮤텍스를 해제하여 다른 스레드가 자원에 접근할 수 있도록 한다.
  • 뮤텍스는 소유권이 있으며, 잠금을 획득한 스레드만 해제를 할 수 있다. 소유권을 명확히 함으로 잘못된 사용을 방지한다.

 

ㅇ 차이점

  세마포어 뮤텍스
자원관리 여러 개의 자원을 관리할 수 있다 단일 자원에 대한 단독 접근을 보장
정수 값 0이상 이진 값(잠김/해제)
소유권 소유권 개념 X 소유권 존재 잠금을 획득한 스레드만 해제 가능
사용 목적 여러 스레드가 자원을 제한적으로 사용할 때 상호 배제를 보장하여 단일 스레드가 자원을 독점하도록 할 때
잠금/해제 방식 P() V() 연산 사용 Lock() Unlock() 연산 사용
동작 방식 카운팅 또는 이진 값을 통해 접근 제한 이진 값을 통해 단독 접근 보장