OS

뮤텍스(Mutex)와 모니터(Monitor) 그리고 세마포어(Semaphore)

개발만파볼까 2023. 5. 15. 02:53
728x90
반응형
SMALL

1. 뮤텍스 (Mutex)
뮤텍스는 "Mutual Exclusion"의 줄임말로, 상호 배제를 의미합니다. 이는 한 번에 하나의 스레드만 특정한 코드를 실행할 수 있게 하는 동기화 기술입니다. 이 기술은 특히 공유 자원에 대한 동시 접근을 제어하는데 사용됩니다.

예를 들어, 두 개의 스레드가 동시에 같은 메모리 위치를 수정하려고 시도하면 예측 불가능한 결과가 발생할 수 있습니다. 뮤텍스는 이런 상황을 방지하며, 하나의 스레드만이 특정 시점에서 공유 자원을 사용할 수 있게 합니다.


https://www.javatpoint.com/mutex-vs-semaphore



2. 모니터 (Monitor)
모니터는 고급 동기화 기법으로, 하나의 프로세스 또는 스레드만이 공유 자원을 접근할 수 있게 하는 메커니즘입니다. 모니터는 뮤텍스와 비슷하게 작동하지만, 모니터는 상호 배제를 보장하는 메소드와 변수의 집합으로 구성된 추상 데이터 유형으로 볼 수 있습니다.

모니터 내부의 모든 메소드는 한 번에 하나의 스레드만 실행할 수 있으므로, 모니터를 사용하는 스레드는 동시에 실행될 때 발생할 수 있는 문제를 걱정하지 않아도 됩니다.

 

모니터의 작동 원리를 보여주는 다이어그램:

https://anazimzada2020.medium.com/monitor-in-process-synchronization-dining-philosophers-problem-and-solution-using-monitors-9f15b3b0b006



이 두 가지 동기화 기술은 병렬 컴퓨팅에서 중요한 역할을 합니다. 뮤텍스와 모니터는 모두 공유 자원의 동시 접근을 제어하며, 뮤텍스는 단일 코드 섹션에 대해 동시성을 제어하고, 모니터는 그것을 더 큰 추상화 수준으로 확장합니다. 이 둘은 동시성 문제를 해결하는 데 도움이 될 수 있지만, 잘못 사용되면 복잡한 버그를 초래할 수 있습니다. 따라서 이들 기술을 사용할 때는 주의가 필요합니다.



3. 뮤텍스(Mutex), 모니터(Monitor), 세마포어(Semaphore) 비교
뮤텍스와 모니터는 모두 공유 자원의 동시 접근을 제어하는 동기화 메커니즘입니다. 그러나 몇 가지 중요한 차이점이 있습니다.

추상화 수준: 뮤텍스는 상대적으로 저수준의 동기화 메커니즘입니다. 뮤텍스는 한 번에 하나의 스레드만이 특정 코드 섹션을 실행하도록 하는 반면, 모니터는 이 개념을 더 확장하여 상호 배제를 보장하는 메소드와 변수의 집합으로 구성된 추상 데이터 유형을 제공합니다.


조건 변수 지원: 모니터는 조건 변수를 지원합니다. 이는 스레드가 특정 조건이 충족될 때까지 대기할 수 있게 합니다. 뮤텍스는 이러한 기능을 제공하지 않습니다.


언어 지원: 뮤텍스는 대부분의 프로그래밍 언어에서 지원되지만, 모니터는 언어에 따라 다르게 지원됩니다. 예를 들어, Java는 'synchronized' 키워드를 통해 모니터를 지원합니다.

 

  뮤텍스 (Mutex) 모니터 (Monitor) 세마포어 (Semaphore)
추상화 수준 중간 수준: 락을 잠그고 해제하는 간단한 동작 제공 높은 수준: 락 메커니즘, 조건 변수 및 그에 대한 대기-알림 메커니즘 제공 낮은 수준: 특정 수의 허용 스레드를 지정할 수 있는 동기화 도구
조건 변수 지원 뮤텍스는 조건 변수를 지원하지 않습니다. 모니터는 조건 변수를 지원하여 스레드가 특정 조건이 충족될 때까지 대기할 수 있게 합니다. 일반적으로 지원 안 함: 하지만 세마포어를 활용해 구현 가능
언어 지원 뮤텍스는 대부분의 프로그래밍 언어에서 지원됩니다. 모니터는 언어에 따라 다르게 지원되며, 예를 들어 Java는 'synchronized' 키워드를 통해 모니터를 지원합니다. 대부분의 병렬 프로그래밍 언어 지원 (예: C++, Java, Python 등)

 


4. 뮤텍스(Mutex)와 모니터(Monitor)의 사용 사례
뮤텍스 사용 사례: 데이터베이스 시스템에서 뮤텍스는 공유 자원에 대한 동시 접근을 제어하는 데 사용됩니다. 예를 들어, 두 개의 스레드가 동시에 같은 레코드를 업데이트하려고 시도할 때, 뮤텍스는 이런 상황을 방지하며, 하나의 스레드만이 특정 시점에서 레코드를 업데이트할 수 있게 합니다.


모니터 사용 사례: 모니터는 복잡한 동기화 문제를 해결하는 데 사용될 수 있습니다. 예를 들어, 생산자-소비자 문제에서 모니터는 생산자와 소비자 스레드 사이의 동기화를 관리할 수 있습니다. 생산자는 버퍼가 가득 차면 대기하고, 소비자는 버퍼가 비어 있으면 대기하게 됩니다.

728x90
반응형
LIST