동기화

동기화는 여러 스레드/프로세스가 공유자원에 접근할 때 문제 없이, 일관성 있게, 충돌 없이 동작하도록 제어하는 개념이다. 여러 스레드가 동시에 공유자원에(전역변수, 버퍼, 메모리 등) 접근하면 실행 순서에 따라 결과가 달라질 수 있고, 예기치 않은 오류가 발생할 수 있기 때문에 동기화가 꼭 필요하다.

동기화가 충족해야 할 세가지 조건이 있는데, 아래와 같다.

대표 동기화 기법

상호배제 (Mutual Exclusion)

특정 프로세스가 공유자원을 사용중일 때 다른 프로세스가 이 자원에 접근하지 못하도록 막는 것을 의미한다.

상호 배제를 위해 위에 언급한 뮤텍스, 세마포어, 모니터 등의 동기화 매커니즘이 사용된다.

락 (Lock)

락은 임계영역(Critical Section) 접근 전 획득하고 작업 후 해제하는 가장 기본적인 동기화 수단이다. 일반적으로 아래와 같이 임계영역 진입 시 락을 획득하고, 임계영역에서의 작업을 마치면 락을 해제한다.

acquire(lock);  
  // 임계영역 진입  
  …공유자원 작업…  
release(lock);  

락을 걸어둔 동안 다른 스레드는 해당 임계영역에 진입할 수 없어야 한다. 즉 상호배제를 보장해야 한다.