서론

스레드 동기화는 여러 스레드가 동시에 접근할 수 있는 공유 자원에 대한 접근을 조절하여 데이터의 일관성을 유지하고

경합 조건(Race Condition)을 방지하는 기술이다.

동기화를 하지 않으면 여러 스레드가 동시에 같은 자원에 접근하여 예기치 않은 결과를 초래할 수 있다.


주요 개념

임계 구역(Critical Section)

여러 스레드가 동시에 접근하면 안되는 코드 블럭이다. 이 구역에서는 공유 자원에 대한 읽기 또는 쓰기가 수행된다.

 

경합 조건(Race Condition)

두 개 이상의 스레드가 동시에 임계 구역을 실행할 때 발생하는 문제로, 데이터의 일관성이 깨지는 현상이다.

 

원자성(Atomicity)

더 이상 쪼갤 수 없는 작업 단위로, 다른 스레드가 끼어들 수 없는 연산을 말한다.


동기화 방법

뮤텍스(Mutex)

  • 상호 배제(mutual exclusion)를 제공하여 한 번에 하나의 스레드만 임계 구역을 실행하도록 한다.
  • lock()과 unlock()을 통해 임계 구역의 진입과 종료를 제어한다.

세마포어(Semaphore)

  • 카운터를 통해 제한된 수의 스레드가 임계 구역에 진입할 수 있도록 한다.
  • wait()과 signal()을 사용하여 카운터를 감소 또는 증가시킨다.
  • 이진 세마포어는 뮤텍스와 유사하게 동작한다.

모니터(Monitor)

  • 객체 수준의 동기화를 제공하며, 객체의 모든 메서드에 대한 상호 배제를 보장한다.

조건 변수(Condition Variable)

  • 스레드 간의 통신을 돕기 위해 특정 조건이 만족될 때까지 스레드를 대기시키고, 조건이 만족되면 대기 중인 스레드를 깨운다.
  • wait(), notify(), notifyAll() 메서드를 사용한다.