CS/Operating System

[OS] Synchronization Problem

최블랙 2021. 12. 1. 23:07

Semaphore를 사용하여 race condition이 발생할 수 있는 문제들을 해결해보자!!!!!!

Bounded-Buffer Problem

Bounded-Buffer Problem은 앞의 포스팅에서 봤던 Producer-Consumer Problem을 말한다.

이때 아이템을 생성하고 소비하는 데이터가 공유되기 때문에 race condition이 발생했다.

👉 Semaphore를 사용하여 해결한다.

 

조건

  • Producer와 Consumer 스레드를 가진다.
  • N 크기의 buffer를 가진다.
  • 공유 데이터
    • Semaphore mutex = 1 → critical section
    • Semaphore full = 0 → buffer 안의 아이템의 수
    • Semaphore empty = N → buffer 안의 빈 슬롯 수

Producer thread

Consumer thread


Readers-Writers Problem

다수의 프로세스가 ReadWrite가 가능한 리소스를 공유하는 경우

→ 다중 Reader동시에 데이터에 접근하는 것은 문제가 없음

Writer는 오직 하나의 프로세스만 공유 데이터에 접근해야 함

👉 Semaphore를 사용하여 해결한다.

 

조건

  • Reader와 Writer 스레드를 가진다.
  • 공유 데이터
    • 데이터
    • Semaphore mutex = 1 critical section
    • Semaphore wrt = 1  writer에 대한 mutual exclusion을 위함
    • Integer readcound = 0 reader 수

Writer thread

Reader thread


Dining Philosophers Ploblem

조건

  • N명의 철학자와 N개의 젓가락이 있다.
  • 먹기 위해서는 2개의 젓가락이 필요하다.
  • 자리 기준 왼쪽 젓가락 먼저 집고 오른쪽 젓가락을 집어야 한다.
  • 각 젓가락은 한 번에 한 명만 사용할 수 있다.
  • 공유 데이터
    • Semaphore chopstick[N] = 1

Philosopher thread

 

이 코드는 정상 작동하는 코드일까

 

위와 같이 wait() 다음 interrupt가 발생한다면 모든 사람이 본인 왼쪽의 젓가락을 점유한 채 오른쪽의 젓가락을 영원히 기다릴 것이다.

👉 deadlock이 발생할 수 있음!!