Lock and Mutex

Lock과 Mutex는 둘 다 여러 스레드가 공유 자원에 동시에 접근하는 것을 방지하는 동기화 도구이다. 한 스레드가 자원을 사용할 때 다른 스레드의 접근을 막는 것이다.

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

실제 구현 시에는 고려할 사항

  • 동시성 요구사항 (얼마나 많은 스레드가 동시에 접근하는가)
  • 성능 요구사항 (응답 시간, 처리량 등)
  • 리소스 사용량 (메모리, CPU 사용률)
  • 오류 처리 및 복구 요구사항
  • 데드록 방지 필요성
  • 플랫폼 및 운영체제의 지원 여부

참고 및 출처