Mutex
(Lock (computer science)/Lock/Locking 항목을 이 글로 이동한다)
컴퓨터 과학에서 락(lock) 또는 뮤텍스(mutex, 상호 배제에서)는 여러 스레드를 실행하는 환경에서 자원에 대한 접근에 제한을 강제하기 위한 동기화 매커니즘이다. 잠금이라고도 한다. 락은 상호 배제 동시성 제어 정책을 강제하기 위해 설계된다.
유형
일반적으로 락은 일치 데이터에 접근하기 전에 락을 획득함으로써 각 스레드가 협업하는 어드바이저리 락(advisory lock)이다. 또, 일부 시스템들은 잠금된 자원에 대한 비인가 접근을 시도하면 예외를 강제하는 맨더터리 락(mandatory lock)을 구현한다.
가장 단순한 록의 유형은 바이너리 세마포어이다. 잠금된 데이터로의 배타적 접근을 제공한다. 그 밖의 스킴들은 데이터를 읽기 위한 공유 접근을 제공하기도 한다. 그 밖의 폭넓게 구현되는 접근 모드로는 exclusive(배타), intend-to-exclude, intend-to-upgrade가 있다.
Windows와 Linux의 Mutex 함수 비교
Mutex가 Windows의 Critical Section과의 차이점은 User영역 개체인지 Kernel 개체인지의 차이이다.
Critical Section은 User모드 개체이기 때문에 하나의 프로세스 안에서 쓰레드 간의 임계영역 설정에 사용이 되지만, Mutex는 커널 모드 개채이므로 여러 프로세스간에 임계 영역 설정에 사용할 수 있다.
Linux에서는 프로세스와 쓰레드간의 차이가 없으므로 Mutex로만 구현되어 있다.
기능 | Windows | Linux |
생성 | CreateMutex | pthread_mutex_init |
해제 | CloseHandle | pthread_mutex_destroy |
진입 | WaitForSingleObject | pthread_mutex_lock |
진출 | ReleaseMutex | pthread_mutex_unlock |
See also
- Critical section
- flock
- Semaphore
- pthread
- 임계 구역
- 파일 잠금
- 모니터 (동기화)
- 세마포어
- 폐색
- Web Locks API