Mutual Exclusion
상호 배제(Mutual Exclusion): 여러 프로세스나 스레드가 공유 자원에 동시에 접근하지 못하도록 제한하는 동기화 기법.
Mutual Exclusion 기법
Mutual Exclusion은 여러 실행 흐름이 같은 공유 자원에 접근할 때 한번에 하나의 실행 흐름만 해당 자원을 사용할 수 있도록 보장해주는 기법이다.
여러 스레드가 동시에 같은 변수, 파일, 메모리 영역, 커널 객체 등에 접근하면 실행 순서에 따라 결과가 달라질 수 있다.
이러한 문제를 Race Condition이라고 한다.
Mutual Exclusion은 Race Condition을 막기 위해 공유 자원에 접근하는 코드 영역을 보호한다.
이때 공유 자원에 접근하는 코드 영역을 Critical Section이라고 한다.
counter++;
위의 C언어 코드는 counter 값을 1 증가시키는 코드이다.
하지만 실제로는 하나의 동작이 아니라 여러 단계로 처리된다.
mov eax, DWORD PTR [counter]
add eax, 1
mov DWORD PTR [counter], eax
즉, counter 값을 메모리에서 읽고, 1을 더하고, 다시 메모리에 저장한다.
만약 두 개의 스레드가 동시에 이 코드를 실행하면 문제가 발생할 수 있다.
순서 Thread 1 Thread 2 counter
| 1 | counter 읽기 | 0 | |
| 2 | counter 읽기 | 0 | |
| 3 | 1 더하기 | 0 | |
| 4 | 1 더하기 | 0 | |
| 5 | counter 저장 | 1 | |
| 6 | counter 저장 | 1 |
두 스레드가 각각 counter를 1씩 증가시켰기 때문에 결과는 2가 되어야 한다.
하지만 두 스레드가 모두 같은 값인 0을 읽고, 각각 1을 저장했기 때문에 결과는 1이 될 수 있다.
즉, 공유 자원에 동시에 접근하면 의도한 결과가 나오지 않을 수 있다.
Mutual Exclusion은 이러한 상황을 막기 위해 Critical Section에 동시에 하나의 실행 흐름만 들어갈 수 있도록 한다.
'DevSec' 카테고리의 다른 글
| eBPF (0) | 2026.06.10 |
|---|---|
| BPF (0) | 2026.06.10 |
| Critical Section (0) | 2026.06.06 |
| Busy Waiting (0) | 2026.06.05 |
| Context Switching (0) | 2026.06.05 |