- 데드락(교착상태)
- 잘못된 자원 관리로 인하여, 시스템 자원에 대한 요구가 뒤엉켜 서로 영원히 대기하는 상태
- 세마포어
- 동시에 여러 스레드가 접근할 수 있는 리소스 수 제한
- 특정 리소스의 사용 여부 표시
- 여러 리소스에 대한 동시 접근 제어 등 다양한 동기화 시나리오에 사용된다
- 뮤텍스
- 특정 시점에 오직 하나의 스레드만 리소스에 접근할 수 있도록 한다.
- 뮤텍스는 잠금과 해제 두 가지 상태만 가지고 있다. LOCK을 획득한 스레드만이 해당 리소스에 접근할 수 있고, 다른 스레드는 대기한다.
데드락(교착상태)
- 잘못된 자원 관리로 인하여, 시스템 자원에 대한 요구가 뒤엉켜 서로 영원히 대기하는 상태
- 참고 - 기아 상태
- 특정 프로세스의 우선 순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태
- IPC를 통해 공유된 자원에 여러 프로세스가 동시에 접근하면 문제가 발생할 수 있다.
- 임계구역 : 이 때 동시에 접근해서는 안되는 공유 자원을 접근하는 코드의 일부
- 발생하는 경우 example
- 첫 번째 스레드는 A의 메모리 주소에 있는 값을 레지스터로 불러온다. (A는 0이었다.)
- 두 번째 스레드는 A의 메모리 주소에 있는 값을 레지스터로 불러온다. (A는 0이었다.)
- 첫 번째 스레드는 불러온 값에 1을 더한다. (0에다가 1을 더하니 1.)
- 두 번째 스레드는 불러온 값에 1을 더한다. (0에다가 1을 더하니 1.)
- 첫 번째 스레드는 불러온 값을 다시 메모리에 쓴다. (A는 1이 된다.)
- 두 번째 스레드는 불러온 값을 다시 메모리에 쓴다. (A는 1이 된다!)
- 이를 하결하기 위해, 데이터를 한 번에 하나의 프로세스만 접근할 수 있도록 제한을 두는 동기화 방식이 있는데, 이 동기화 도구에는 대표적으로 세타포어와 뮤텍스가 있다.
세마포어

- 공유 자원에 접근할 수 있는 프로세스 최대 허용치만큼 동시에 사용자가 접근할 수 있다.
뮤텍스

- 임계 구역을 가진 또다른 스레드의 실행시간이 겹치지않도록, 단독으로 실행되도록 한다.
- 동기화 또는 Lock을 이용해 프로세스 접근을 조율한다.
뮤텍스와 세마포어의 차이점
- 동기화 대상의 개수
- Mutex는 동기화 대상이 only 1개일 때 사용
- 세마포어는 동기화 대상이 1개 이상일 때 사용
- 세마포어는 뮤텍스가 될 수 있지만 뮤텍스는 세마포어가 될 수 없다.
- 뮤텍스는 0,1로 이루어진 이진 상태이므로 Binary 세마포어
- 뮤텍스는 자원 소유가능 + 책임을 가지는 반면 세마포어는 자원 소유가 불가
- 뮤텍스는 소유하고 있는 스레드 만이 이 뮤텍스를 해제할 수 있다.
- 반면, 세마포어는 세마포어를 소유하지 않는 스레드가 세마포어를 해제할 수 있다.
- 세마포어는 시스템 범위에 걸쳐 있고 파일 시스템 상의 파일로 존재한다.
- 반면 뮤텍스는 프로세스의 범위를 가지며 프로세스 종료될 때 자동으로 Clean up된다.
Share article