운영체제

[OS] 동기화와 Race condition

KyooDong 2020. 11. 28. 04:35
728x90

Synchronization

Producer : 데이터를 제공하는 스레드 ( 예를 들어 무한 반복하며 counter++; 하는 스레드)

Consumer : 데이터를 소비하는 스레드 ( 무한 반복하며 counter--; 하는 스레드)

멀티 스레드 환경에서는 counter 라는 공유 변수에 동시에 접근하여 예상하지 못한 결과가 발생하곤 함

Race condition

공유 데이터에 여러 프로세스가 동시에 접근하려고 하는 상황

Race condition 이 발생하는 순간 데이터의 consistency 가 깨졌다. 라고 표현하며 이 경우 Synchronization(동기화) 를 제공해주어야함

 

예를 들어 counter 가 0 일 때 producer 스레드가 6번 수행되고, consumer 스레드가 1번 수행된다면 counter 는 5가 맞음

하지만 race condition 으로 인해 다음과 같이 6 또는 4의 결과를 내는 경우가 생김

Race condition 으로 인한 결과는 데이터에 대한 접근과 갱신이 일어나는 순서에 따라 달라짐 (위의 경우 counter = register1이 먼저 실행되는지 register2가 먼저 실행되는지에 따라 6,4 결과가 갈림)

 

위와 같이 예측할 수 없는 값을 갖는 경우를 없애려면 한 번에 오직 하나의 프로세스 만이 특정 변수를 조작하는 것을 보장하는 동기화 작업이 필요

fdsaf