Race condition은 공유자원을 얻기 위해 경주하는 상황을 일컫는 용어로, multi-proccesing 모듈에서 여러개의 process나 thread가 공유하고 있는 메모리에 동시에 접근할 때 발생한다. 이 상황이 발생하는 부분을 critical section이라고 하며, critical section에서는 보통 공유 자원을 검사 후 행동(check-then-act)을 취하는 일련의 과정이 진행되는데, 이 공유 자원에 대한 아무런 제어가 없다면 원하는 결과를 보장받을 수 없다. 다음 코드는 x라는 공유 자원의 조건 검사 후에 그 값을 이용해 다른 변수의 값을 갱신한다.
if (x == 1) // Check
{
y = x + 1; // Act
}
process나 thread의 실행 순서는 scheduling 알고리즘에 영향을 받으며, 위 코드의 Check와 Act 사이에 x값이 변경되지 않는다는 보장이 없다. 따라서 원하는 결과를 기대하기 위해서는 다음과 같이 x에 대한 다른 thread의 접근 제어가 필요하다. 즉, critical section부분을 진행하는 동안은 다른 thread가 x의 값을 변경할 수 없게 해야 한다.
// lock x
if (x == 1)
{
y = x + 1;
}
// unlock x
'운영체제' 카테고리의 다른 글
Priority Inversion (0) | 2020.04.14 |
---|---|
Memory Layout of a Program(Process) (0) | 2020.04.09 |
Process와 Thread의 비교 및 차이 (0) | 2020.04.07 |
WHAT HAPPENS WHEN YOU TURN A COMPUTER ON? (0) | 2020.04.06 |