이진 세마포어와 뮤텍스의 차이점
이진 세마포어와 뮤텍스는 모두 상호 배제를 위해 사용되지만, 몇 가지 중요한 차이점이 있다.
이진 세마포어 (Binary Semaphore)
- 기본 개념: 값이 0 또는 1인 세마포어로, 뮤텍스와 유사하게 작동하여 한 번에 하나의 스레드만이 공유 자원에 접근할 수 있도록 한다.
- 소유권: 이진 세마포어는 소유권 개념이 없어, 잠금을 획득한 스레드와 잠금을 해제하는 스레드가 다를 수 있다.
- 사용 목적: 주로 신호(signal) 전달이나 상태 표시에 사용되며, 상호 배제 목적으로도 사용할 수 있지만, 소유권 관리가 없어 주의가 필요하다.
뮤텍스 (Mutex)
- 기본 개념: 상호 배제(Mutual Exclusion)를 목적으로 설계된 동기화 메커니즘으로, 한 번에 하나의 스레드만이 공유 자원에 접근할 수 있게 한다.
- 소유권: 뮤텍스는 소유권 개념을 가지며, 잠금을 획득한 스레드만이 잠금을 해제할 수 있다.
- 사용 목적: 공유 자원의 접근을 상호 배제적으로 관리하기 위해 사용된다.
Spin Lock의 장단점
장점
- 응답성: Lock을 빠르게 획득할 수 있을 때, 빠른 응답 시간을 제공한다.
- 컨텍스트 스위칭 감소: 대기 중인 프로세스가 CPU를 릴리스하지 않아 컨텍스트 스위칭이 발생하지 않으며, 오버헤드가 감소한다.
단점
- CPU 자원 낭비: Lock을 획득할 때까지 계속해서 CPU 시간을 소비하여 다른 유용한 작업을 할 기회가 줄어든다.
- 바쁜 대기: Lock을 기다리는 동안 아무 일도 하지 않으면서 CPU 시간을 사용한다.
단점 해결 방법
- Adaptive Spin Lock: Spin Lock 대기 시간이 일정 임계값을 초과하면 프로세스를 슬립 상태로 전환하여 CPU 자원 낭비를 줄이는 방법이다.
시스템 콜을 사용하는 Lock의 장단점
장점
- 일관성 및 안정성: 커널이 Lock을 관리함으로써 Lock의 상태가 일관되게 유지되고, 멀티 스레드 환경에서의 안정성이 보장된다.
- 보안: 사용자 모드와 커널 모드의 구분을 통해 시스템 자원에 대한 접근을 안전하게 관리할 수 있다.
단점
- 오버헤드: 사용자 모드와 커널 모드 사이의 전환으로 인한 오버헤드가 발생한다.