동기화 이슈

  • 동기화 : 작업들 사이에 실행 시기를 맞추는 것
  • 여러 스레드가 동일한 자원 접근시 동기화 이슈 발생
    • 동일 자원을 여러 스레드가 동시 수정시 ,동기화 이슈

해결방안

  • mutual exclusion (상호배제)
  • 쓰레드는 프로세스 모든 데이터를 접근할 수 있으므로, 여러 스레드가 변경하는 공유 변수에 대해서 Exclusive Access 필요
  • 어느 한 스레드가 공유변수 갱신하는 동안 다른 스레드가 동시 접근하지 못하도록 막아라

Mutual exclusion (상호배제)

  • 임계 자원
  • 임계 영역
    image.png

동기화(Synchronization)와 세마포어

  • Critical Section(임계구역)에 대한 접근을 막기 위해 locking 메커니즘이 필요

    • Mutex(binary semaphore)
      • 임계구역에 하나의 스레드만 들어갈 수 있음
    • Semaphore
      • 임계구역에 여러 스레드가 들어갈 수 있음
      • counter를 두어서 동시에 리소스에 접근 할 수 있는 허용 가능한 스레드 수를 제어
      • 하나의 스레드만 임계구역에 들어가면, 성능 이슈가 발생하기 때문에 생긴 기법

세마포어

image.png

세마포어 바쁜대기 (busy wait)

  • s가 0이라면, 임계영역에 들어가기 위해, 반복문 수행

세마포어 대기큐

  • s가 음수일 경우, 바쁜 대기 대신, 대기큐에 넣는다
  • s가 1보다 크면, running 상태로 해당 프로세스를 이동 시킨다. (wakeup())

image.png