뮤텍스(Mutex)
뮤텍스는 상호배제를 위한 동기화 기법이다.
한 순간에 오직 하나의 스레드만 공유자원에 접근할 수 있도록 보호한다. 뮤텍스는 임계영역에 진입할 때 락을 걸고, 임계영역에서 나올 때 락을 해제한다.
세마포어(Semaphore)
세마포어는 공유자원의 접근을 제한하는 동기화 기법이다.
여러개의 스레드가 동시에 공유자원에 접근할 수 있지만, 제한된 개수의 스레드만이 동시에 접근할 수 있도록한다.
세마포어는 정수형 변수로 선언하며, 이 변수를 통해 스레드의 접근을 제어한다.
세마포어는 두 가지 연산을 제공한다.
- P(wait) 연산은 세마포어 값을 감소시키고, 0 이하가 되면 스레드를 블록한다.
- V(signal) 연산은 세마포어 값을 증가시키고, 블록된 스레드 중 하나를 깨운다.
모니터(Monitor)
모니터는 상호배제와 조건변수 두 가지를 이용하여 공유자원에 대한 접근을 동기화하는 기법 중 하나이다.
모니터는 공유자원에 대한 접근을 보호하는 개념적인 컨테이너이다. 공유자원에 대한 접근을 제한하고, 접근제한이 필요한 코드 영역을 모니터로 묶어서 모니터 내부에서만 접근이 가능하도록 한다. 모니터는 동시에 하나의 스레드만이 진입하여 접근할 수 있으므로, 공유자원에 대한 접근을 안전하게 보호할 수 있다.
모니터는 두 가지 기본요소를 포한한다.
- 상호배제
- 모니터는 상호배제를 제공하여 공유 자원에 대한 동시 접근을 막는다.
- 조건변수
- 모니터 내부에서 공유자원에 대한 조건을 검사하고, 만족하지 않으 ㄹ때는 스레드를 대기상태로 만든다. 대기중인 스레드는 다른 스레드가 조건을 만족시킬 때까지 대기하다, 만족되면 대기상태에서 깨어나서 공유자원에 접근하게된다.
상호배제와 조건변수를 이용한 모니터는 공유자원에 대한 접근을 안전하게 보호하고, 스레드 간의 협력적인 동작을 가능하게 한다.
상호배제(Mutual Exclusion)
상호배제는 공유자원에 대한 접근을 한 번에 한 프로세스나 스레드만 가능하도록 하는 것이다. 상호배제는 여러 프로세스나 스레드가 동시에 공유자원에 접근하는 것을 방지하여 데이터 무결성을 유지하고, 일관성 있는 동작을 보장한다.
상호배제를 위해 뮤텍스, 세마포어 등의 기술을 사용한다. 이러한 기술은 임계영역에 대한 접근을 동기화하여, 하나의 프로세스나 스레드가 임계영역에 대한 접근을 동기화하여, 하나의 프로세스나 스레드가 임계영역에 접근 중일 때 다른 프로세스나 스레드는 접근할 수 없도록 한다.
임계영역(Critical Section)
임계영역은 여러 프로세스나 스레드가 공유하는 자원에 대한 접근을 동기화하여 데이터의 일관성을 유지하기 위해 접근을제한하는 코드 영역을 말한다. 즉, 한 순간에 하나의 프로세스나 스레드만 접근하도록 제한된 코드영역이다.
임계영역은 프로세스나 스레드가 동시에 접근하면 문제가 발생할 수 있는 부분이기 때문에 상호배제가 필요하다. 따라서 임계영역에 접근하기 전에 반드시 뮤텍스, 세마포어 등 동기화 기법을 사용하여 다른 프로세스나 스레드의 접근을 제어한다.
임계영역을 잘못 구현하면 경쟁조건(Race Condition)과 같은 문제가 발생한다.
댓글