-
[운영체제] 뮤텍스(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