ABOUT ME

Today
Yesterday
Total
  • [운영체제] 뮤텍스(Mutex)와 세마포어 (Semaphore)
    운영체제 2024. 9. 21. 03:59

    뮤텍스와 세마포어는 멀티스레드 환경때문에 나왔다 

     

    왜 나왔냐?

    -> 동시성 문제 때문에 나왔다

    -> 데드락 문제

     

     

    동시성 문제

    동시성 문제는 여러 스레드가 동시에 접근할 때 발생할 수 있는 충돌을 말한다

     

    데드락(deadlock)

    두개 이상의 스레드가 서로 다른 자원을 점유하고 서로 상대방의 자원을 기다릴때 교착 상태가 발생 할 수 있다

     

    예를 들면 

    여러 스레드가 하나의 데이터베이스에 동시에 update 연산을 시도할 경우에 데이터 일관성에 문제가 생길 수 있다 

     

    이를 방지하기 위해 뮤텍스세마포어가 필요하다

     

     

    뮤텍스(Mutex)?

     

    • 한번에 하나의 스레드만 특정 자원에 접근 할 수 있도록 제어하는 동기화 객체이다
    • 자원에 접근하기 전 뮤텍스를 획득 하고 자원 사용이 끝나면 해제하는 방식이다

     

     

    세마포어(Semaphore)?

     

    • 정해진 개수의 스레드가 자원에 접근할 수 있도록 허용하는 동기화 도구
    • 카운터로 동작하고 각 스레드가 자원을 사용할 때마다 카운터 값을 감소시키고 사용을 마치면 카운터 값을 다시 증가 시킨다

     

     

    그럼 각각 어떨때 사용할까?

     

    뮤텍스 :

    • 한번에 하나의 스레드만 자원을 사용해야 할때
    • 동시에 여러 스레드가 파일에 접근하여 데이터를 변경하면 데이터가 꼬일 수 있다 
    • 이때 뮤텍스를 사용하여 데이터 일관성을 보장한다

     

    세마 포어 :

    • 여러 스레드가 동시에 자원에 접근할 수 있지만 자원의 수가 제한되어 있을때
    • 데이터베이스 connection pool 에서 여러 스레드가 동시에 접근 하려고 하면 세션의 수가 제한적이다
    • 이때 세마포어를 사용하여 일정 수의 스레드만 접근 할 수 있게 제한하면 과부화를 방지하고 여러 스레드가 동시에 자원을 사용할 수 있게 된다

     

     

    차이점 정리

      뮤텍스 세마포어
    동작 방식 한 번에 하나의 스레드만 자원 접근 가능 여러 스레드가 자원에 접근 할 수 있음
    소유권 소유권이 있다 소유권 없다
    자원 접근  자원에 대한 독점적 접근을 보장 자원에 대해 공유 접근을 허용

     

    '운영체제' 카테고리의 다른 글

    [운영체제] 프로세스와 스레드  (0) 2024.08.02
    [운영체제] 메모리란?  (0) 2024.06.19
    [운영체제] PCB는 어떤 녀석일까?  (0) 2024.05.17
Designed by Tistory.