뮤텍스(Mutex)

bolee·2022년 8월 29일
1

42seoul

목록 보기
21/27
post-thumbnail

뮤텍스란?

뮤텍스(Mutex)는 상호 배제(Mutual Exclusion)의 약자로 락(Lock)이라고도 한다.

이는 여러 쓰레드(Thread)를 실행하는 환경에서 자원에 대한 접근 제한을 위한 동기화 메커니즘이다.
상호 배제 동시성 제어 정책(Mutual Exclusion Concurrency Control Policy)를 시행하도록 설계되었으며 가능한 다양한 방법을 통해 여러 고유한 구현이 존재한다.

동시성 제어(Concurrency Control)
가능한 빠른 조회와 동시에 병행되는 동작의 정확한 결과가 발생하는 것을 보증하는 것을 말한다.

다시 말해 임계구역(Critical Section)을 가진 쓰레드들의 실행시간(Running Time)이 서로 겹치지 않고 각각 단독으로 실행되도록 하는 기술이다.

뮤텍스는 Locking 메커니즘으로 오직 하나의 쓰레드만이 동일한 시점에 뮤텍스를 얻어 임계 영역(Critical Section)에 들어올 수 있다.
그리고 오직 해당 쓰레드만이 임계 영역에서 나갈 때 뮤텍스를 해제할 수 있다.

따라서 뮤텍스는 아래 두 가지 연산만을 지원하면 된다.

  • lock: 현재의 임계 구역에 들어갈 권한을 얻어온다. 만일 다른 프로세스/스레드가 임계 구역을 수행 중이라면 종료할때까지 대기한다(entry section).

  • unlock: 현재의 임계 구역을 모두 사용했음을 알린다. 대기중인 다른 프로세스/스레드가 임계 구역에 진입할 수 있다(exit section).

임계 구역/영역(Critical Section)

공유변수 영역이라고도 하며, 여러 프로세스 또는 쓰레드가 데이터를 공유하며 수행될 때, 각 프로세스/쓰레드에서 공유 데이터를 접근(Access)할 수 있도록 하는 프로그램 코드 부분이다.
즉, 여러 프로세스/쓰레드가 동일 자원을 동시에 참조하여 값(공유하는 변수명, 파일 등)이 오염될 위험 가능성이 있는 영역이다.

따라서 프로그래밍 시 성능 향상을 위해 임계영역을 최소화하는 설계를 해야 한다.

세마포어와의 관계

뮤텍스와 세마포어는 서로 튜링 동치이다. 즉, 뮤텍스로 세마포어를 구현할 수 있고 세마포어로 뮤텍스를 구현할 수 있다.

튜링 동치(Turing equivalence)
만일 컴퓨터 P와 Q가 있을 때, P가 할 수 있는 일을 Q가 모두 흉내(simulate)낼 수 있고, Q가 할 수 있는 일을 모두 P가 흉내낼 수 있다면 두 컴퓨터는 튜링 동치이다.

세마포어는 동시에 여러 개의 프로세스/쓰레드가 임계 구역에 접근할 수 있도록 카운트를 가지고 있는데 카운트가 1인 특별한 세마포어가 뮤텍스라고 할 수 있다.

참고 자료

https://en.wikipedia.org/wiki/Lock_(computer_science)
https://en.wikipedia.org/wiki/Concurrency_control
https://chelseashin.tistory.com/40
https://heeonii.tistory.com/14
https://velog.io/@flasharrow/%EB%AE%A4%ED%85%8D%EC%8A%A4Mutex-%EC%84%B8%EB%A7%88%ED%8F%AC%EC%96%B4Semaphore

0개의 댓글