동일한 데이터를 동시성 프로그래밍 등으로 인해 여러 프로세스, 여러 스레드가 동시에 접근할 수 있다면, 다른 프로세스에 의해서 변경되거나 삭제된 값으로 인해 다른 프로세스에서 오류가 발생할 수 있다.
여러 프로세스가 동시에 접근하는 데이터 영역을 임계 영역(Critical Section)이라고 부르고 이를 최소화할 수 있도록 프로그램을 설계하는 것이 중요하다.
동일한 데이터를 여러 프로세스가 동시에 접근해서 사용한다면 오류가 발생할 수 있기 때문에, 한 프로세스가 해당 자원을 사용하고 있을 때 다른 프로세스의 접근을 막는 상호배제(Mutual Exclusion) 방법이 필요하다.
이 상호 배제 방법에는 세마포어와 뮤텍스가 있다.
두 방법 모두 자원에 대해서 mutex, semaphore에 관한 명령어를 호출하는게 아니라 프로세스 내에서 뮤텍스나 세마포어로 lock을 한 구간에서 접근하는 자원에 대해서 적용되는거라, 세마포어 방식이 양심적으로 작동하는 것 같다.. 음.. 내부적인 원리를 더 공부해야할 것 같음..특히 세마포어
- 뮤텍스 (Mutex)
뮤텍스는 하나의 공유 자원에 대해 key라는 객체를 소유하고 있는 프로세스 혹은 스레드만 접근할 수 있도록 하는 방식이다.
(자원 당 key 오브젝트는 한 개가 있다는 가정.)
뮤텍스 방법을 키가 하나인 공용 화장실에 비유한 것이 이해하기 쉬웠다.
- 세마포어 (Semaphore)
세마포어는 하나 이상의 공유 자원에 대해 접근할 수 있는 프로세스 혹은 스레드의 수(세마포어)를 배정해놓고 그만큼의 프로세스만 접근할 수 있도록 함.
프로세스는 본인이 사용할 때 세마포어 수를 1 줄이고, 사용을 끝낼 때 세마포어 수를 1 증가시키는 식으로 작동
기다리고 있던 프로세스는 해당 공유 자원의 세마포어 수가 1이상일 때 사용할 수 있음.
여러 칸을 가진 공용 화장실의 빈칸의 개수를 보여주는 전광판이 있다는 비유가 이해하기 쉬웠음.
뮤텍스와 세마포어의 차이점
- 뮤텍스는 공유자원 하나에 대한 방법, 세마포어는 공유자원 여러개에 적용될 수 있음
- 뮤텍스는 세마포어 값이 1인 것으로도 볼 수 있음
- 뮤텍스는 자원을 소유한다는 개념이지만, 세마포어는 소유 개념은 아님
- 뮤텍스는 소유하고 있는 스레드 혹은 프로세스만 뮤텍스를 해제(unlock)할 수 있지만, 세마포어는 소유하고 있지 않은 프로세스 or 스레드도 값을 변경할 수 있다고 함..
'CS' 카테고리의 다른 글
[컴퓨터구조] CPU 아키텍처 (x86, ARM) (0) | 2025.03.10 |
---|---|
[컴퓨터구조] 캐시 메모리 (개념, 역할, 매핑, 지역성) (0) | 2025.03.10 |
[알고리즘] 시간복잡도 (0) | 2025.02.20 |
[컴퓨터구조] 컴퓨터 시스템의 CPU, RAM(메모리), 보조 저장 장치, 시스템 버스 (0) | 2025.02.18 |