[개요]
Mutex와 Semaphore는 동시에 여러 프로세스나 스레드가
공유 리소스에 접근할 때 발생할 수 있는 문제를 관리하기 위한 동기화 기법이다.
이들은 프로그램에서 여러 스레드 또는 프로세스가
공유 자원을 안전하게 사용하도록 조절하는데 사용된다.
[Mutex]
📌 Mutex란?
뮤텍스는 "상호 배제"를 의미하는 Mutual Exclusion의 약자로,
✅ 오직 하나의 스레드만이 특정 코드 블록을 실행하도록 보장하는 동기화 기법이다.
(공유 자원 1개에 하나의 User만 사용 가능, 동기화 대상이 1개)
이는 특정 리소스에 대한 접근을 한 번에 하나의 스테드만 가능하도록 하여,
데이터의 일관성과 안정성을 보장하고 하나의 스레드가 뮤텍스를 잠그면(획득하면),
다른 스레드들은 해당 뮤텍스를 얻을 때까지 대기하게 된다.
스레드가 작업을 마치고 뮤텍스를 해제하면, 대기 중인 다른 스레드 중 하나가 뮤텍스를 얻어
작업을 진행하게 된다.
식당 화장실을 생각해보자.
화장실의 수는 하나밖에 없고,
화장실을 이용하기 위해서는 카운터에서 열쇠를 받아가야 한다.
손님이 화장실을 가려 할 때,
카운터에 키가 없다면, 화장실에 사람이 없다는 뜻이고
손님은 열쇠를 이용해 화장실에 들어갈 수 있다.
(화장실 = 공유 자원, 손님 = User, 열쇠 = Mutex)
정리하면, Mutex는 임계구역(Critical Selection)을 가진 스레드들의
실행 시간(Running Time)이 서로 겹치지 않고
각각 단독으로 실행(상호 배제, Mutual Exclusion)되도록 하는 기술을 의미한다.
[Semaphore]
📌 Semaphore란?
✅ 특정 리소스에 대한 접근 가능한 스레드 또는 프로세스의 수를 관리하는 동기화 기법이다.
세마포어는 정수형 변수로 표현되며,
값을 통해 몇 개의 스레드가 동시에 접근할 수 있는지를 조절한다.
세마포어 값이 1인 경우, 뮤텍스와 유사하게 동작하고
세마포어 값이 N인 경우, 최대 N개의 스레드가 동시에 접근할 수 있으며,
세마포어는 획득(원자적으로 값을 감소시킴)과
해제(원자적으로 값을 증가시킴)의 두 가지 기본 연산을 갖는다.
또 다시 식당 화장실을 생각해보자.
Semaphore는 화장실이 여러 개인 식당이이고,
또한 화장실 입구에는 현재 화장실의 빈 칸 갯수를 보여주는 전광판이 있다.
(화장실 = 공유 자원, 손님 = User, 빈 칸의 수 = 공유 자원에 접근 가능한 Task 수)
이러한 세마포어는 주로 "생산자-소비자" 문제와 같이
제한된 수의 자원을 공유하는 경우에 유용하게 사용되고
뮤텍스의 확장된 형태로도 볼 수 있다.
[Mutex와 Semaphore의 장단점]
Mutex | Semaphore | |
장점 | 단일 리소스의 상호 배제 제어 |
다중 리소스의 동시 접근 제어 가능 |
간단한 사용 및 이해 | 제한된 자원의 활용으로 효율적으로 관리 가능 |
|
데드락 가능성이 적음 | 복잡한 스레드/프로세스 동기화 시나리오에 유용 |
|
단점 | 한 번에 하나의 스레드만 접근 가능 |
카운트 값 관리로 인한 복잡성 증가 |
복잡한 상호 배제 문제에 적합하지 않을 수 있음. |
데드락 가능성이 높을 수 있음. |
|
효율적이지 않은 다중 리소스 관리 가능 |
✅ 데드락(Deaelock)
프로세스나 스레드들이 서로가 갖고 있는 자원을 기다리며
무한히 멈춰 있는 상태를 말한다.
▶데드락 발생 조건(동시 충족 시, 발생)
- 상호 배제 : 한 번에 하나의 자원 사용 중
- 점유 및 대기 : 자원이 점유되어 다른 유저가 대기 중
- 비선점 : 점유된 자원을 강제로 탈취 불가
- 순환 대기 : 프로세스 간, 자원을 원형으로 대기 중
[정리]
✅ Mutex는 주로 단일 리소스의 상호 배제에 사용되며,
(하나씩만 사용 가능)
✅ Semaphore는 한정된 수의 리소스에 대한 접근을 제어하는 데 사용된다.
(동시에 여러 개 사용 가능)
어떤 상황에서 어떤 동기화 기법을 선택할 지는 문제의 복잡도와 요구 사항에 따라 다르게 결정된다.
'# Programming > - Embedded 관련 지식' 카테고리의 다른 글
신개념 컴퓨터 아키텍쳐, CXL이란? (0) | 2023.09.20 |
---|---|
임베디드 시스템의 핵심 기술, RTOS란? - Part.2 (CPU 동작 단계, CPU Scheduling, Process, Task vs Thread) (0) | 2023.09.04 |
OS(운영체제)의 핵심 엔진 - Kernel(커널)의 기능과 구조, Scheduling Algorithm, Context Switching (0) | 2023.08.31 |
Computer Architecture, RISC & CISC란? (0) | 2023.08.17 |
임베디드 시스템의 핵심 기술, RTOS란? - Part.1 (기본 개념 및 특징, FreeRTOS, OSEK/VDX, 용어 정리-Task, Deadline 등) (0) | 2023.08.16 |