DevSec

Mutual Exclusion

hsnyus 2026. 6. 6. 19:53

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에 동시에 하나의 실행 흐름만 들어갈 수 있도록 한다.