-
[OS] 동기화와 Race condition운영체제 2020. 11. 28. 04:35728x90
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
'운영체제' 카테고리의 다른 글
[OS] Mutex, Semaphore 동기화, Busy waiting (0) 2020.11.28 [OS] Critical section (임계구역), test_and_set, compare_and_swap (0) 2020.11.28 [OS] 스레드와 시그널 및 스레드 취소 (0) 2020.11.27 [OS] 멀티스레드와 fork(), exec() 의 관계 (0) 2020.11.27 [OS] Implicit Threading (0) 2020.11.27