Over the limit

[운영체제] Concurrency Problem이란? 본문

Operation System

[운영체제] Concurrency Problem이란?

ellapk 2021. 9. 14. 01:46

OS가 한번에 많은 일을 하거나, 멀티스레드 프로그램을 돌리다보면 Concurrency Problem을 겪을 수 있다.

 

 

 

멀티스레드는 생성 Overhead가 적고, Thread간의 통신이 간단하다는 장점을 가지고 있지만,

하나의 스레드에서 발생한 문제가 전체 프로세스를 멈추게 할 수 있다는 단점도 갖고 있다.

따라서 멀티스레드를 이용하다가 잘못된 scheduling, 동시에 공유 자원에 접근 하다보면 오류가 발생하며

Concurrency Problem을 마주하게 되는 것이다.

 

 

 

예시를 통해 더 살펴보자.

thread 2개를 돌렸으니 1000 -> 2000 아주 바람직한 결과가 나온다.

 

 

 

 

여기도 thread 2개를 돌렸는데, 100000->200000이 아닌 이상한 숫자가 나왔다.

왜 그럴까? 앞에서 설명한 바와 같이 멀티스레드 프로그램을 사용하다가 concurrency 문제가 발생한 경우이다.

 

 

 

 

 

 

 

우리가 생각하기엔 순차적으로 100000을 두번 돌리면 끝이라고 보겠지만,

Load -> Increment -> Store 되는 이 Instruction이 atomically하게 실행되지 않은 것이다.

따라서 thread에서 올리는 정보의 내용이 섞이다보니 마지막엔 원하는 결과가 나오지 않게 되는 것

 

Transaction T2에 Dirty Read를 보면 방금 말한 것과 같이 순차적이지 않은, 

thread끼리 섞이는 것이 무엇인지 더 잘 이해할 수 있다.

 

 

 

 

 

 

 

 

 

Concurrency Problems | DBMS | Gate Vidyalay