Lock and Mutex
Lock과 Mutex는 둘 다 여러 스레드가 공유 자원에 동시에 접근하는 것을 방지하는 동기화 도구이다. 한 스레드가 자원을 사용할 때 다른 스레드의 접근을 막는 것이다.
특성 | Mutex | Lock |
---|---|---|
기본 개념 | 상호 배제를 위한 동기화 객체로, 소유권 개념이 있음 | 일반적인 동기화 메커니즘으로, 단순한 잠금/해제 기능 |
소유권 | 소유권 개념이 있어 획득한 스레드만 해제 가능 | 소유권 개념이 없어 다른 스레드도 해제 가능 |
재진입성 | 보통 재진입 가능 (같은 스레드가 여러 번 획득 가능) | 구현에 따라 재진입 가능할 수 있음 |
용도 | 스레드 간 엄격한 상호 배제가 필요한 경우 | 간단한 동기화가 필요한 일반적인 상황 |
성능 | 소유권 검사 등으로 인한 오버헤드 존재 | 상대적으로 가벼운 오버헤드, 단 구현에 따라 다름 |
에러 처리 | 소유권 위반 시 예외 발생 가능 | 단순한 실패/성공 여부만 반환 |
구현 복잡도 | 상대적으로 복잡한 구현 | 단순한 구현, 그러나 고급 기능 추가 시 복잡해질 수 있음 |
적용 범위 | 프로세스 내 스레드 간 동기화 | 프로세스 내 또는 프로세스 간 동기화에 사용 가능 |
우선순위 상속 | 우선순위 상속 지원 가능 | 일반적으로 지원하지 않음, 구현에 따라 다를 수 있음 |
교착상태 처리 | 소유권 추적으로 교착상태 감지 용이 | 기본적인 교착상태 감지만 가능 |
에러 검사 | 상세한 에러 검사 및 보고 기능 | 기본적인 에러 검사, 구현에 따라 확장 가능 |
메모리 사용 | 소유권 정보 저장으로 추가 메모리 필요 | 최소한의 메모리 사용 |
유연성 | 엄격한 규칙으로 유연성 제한 | 상대적으로 유연한 사용 가능 |
디버깅 | 소유권 정보로 디버깅 용이 | 디버깅이 상대적으로 어려움, 구현에 따라 다를 수 있음 |
사용 예시 | 데이터베이스 트랜잭션, 파일 시스템 접근 | 간단한 공유 자원 보호, 카운터 |
타임아웃 지원 | 보통 타임아웃 기능 내장 | 구현에 따라 타임아웃 지원 가능 |
복구 기능 | 비정상 종료 시 자동 복구 지원 | 구현에 따라 자동 복구 기능 추가 가능 |
중첩 사용 | 재진입성으로 중첩 사용 가능 | 구현에 따라 중첩 사용 가능, 주의 필요 |
시스템 수준 | 주로 커널 수준에서 구현 | 사용자 수준 및 커널 수준 모두에서 구현 가능 |
표준화 | POSIX 표준으로 잘 정의됨 | 구현에 따라 동작이 다를 수 있음 |
성능 특성 | 경쟁 상황에서 성능 저하 가능 | 스핀락 구현 시 짧은 대기 시간에 효율적 |
공정성 | 일반적으로 공정성 메커니즘 내장 | 구현에 따라 공정성 보장 여부가 다름 |
실제 구현 시에는 고려할 사항
- 동시성 요구사항 (얼마나 많은 스레드가 동시에 접근하는가)
- 성능 요구사항 (응답 시간, 처리량 등)
- 리소스 사용량 (메모리, CPU 사용률)
- 오류 처리 및 복구 요구사항
- 데드록 방지 필요성
- 플랫폼 및 운영체제의 지원 여부