본문 바로가기
지식/잡학지식

잡학지식) 레이스 컨디션 (Race Condition)

by 테샤르 2019. 10. 20.

레이스 컨디션 (Race Condition)

 

 

일반적으로 레이스 컨디션 이란 두 개 이상의 프로세스가 공통 자원을 병행적으로(concurrently) 읽거나 쓸 때, 공용 데이터에 대한 접근이 어떤 순서에 따라 이루어졌는지에 따라 그 실행 결과가 달라지는 상황을 말한다.

반응형


레이스 컨디션이 발생하게 되면 모든 프로세스에 원하는 결과가 발생하는 것을 보장할 수 없으므로 이러한 상황은 반드시 피해야 한다.  중간에 값이 변경되는 것은 예측이 불가능하고 실제 이런 코드들이 문제를 발생하기도 한다.

예시로 보면 
병행적으로 수행되는 두 프로세스 A와 B에서 공용으로 사용하는 데이터 value가 있고 10라는 값을 가지고 있다고 하자.


value = 5

프로세스 A 프로세스 B
ㄱ) value--;
              ㄴ) printf("%d", value);

 ㄷ) value++

               ㄹ) printf("% d", value);



프로세스 A의 입장에서는 9라는 값을 기대할 것이고, B)의 입장에서는 11이라는 값을 기대할 것이다. 하지만 두 프로세스의 결과는 어떤 순서로 프로세스의 각 부분이 공용 데이터 value에 접근하는가에 따라 달라진다.
 

결과값은 다음과 같다.
프로세스 A -  프로세스 B
ㄱ), ㄴ), ㄷ), ㄹ) 9 10
ㄷ), ㄹ), ㄱ), ㄴ) 10 11
ㄱ), ㄷ), ㄴ), ㄹ) 10 10
ㄷ), ㄱ), ㄴ), ㄹ) 10 10



간단한 예로는 값을 변환하지만

value를 은행 계좌로 대입을 하면

프로세스 A와 B를 같은 계좌에서 돈을 입금하거나 출금하려고 하는 상황으로 대입하면 데이터의 무결성을 해야하는  중요성을 쉽게 파악할 수 있을 것이다. 

반응형

 

 

임계구역 

임계 구역(critical section) 또는 공유변수 영역은 병렬컴퓨팅에서 둘 이상의 스레드가 동시에 접근해서는 안 되는 공유 자원(자료 구조 또는 장치)을 접근하는 코드의 일부를 말한다. 임계 구역은 지정된 시간이 지난 후 종료된다. 때문에 어떤 스레드(태스크 또는 프로세스)가 임계 구역에 들어가고자 한다면 지정된 시간만큼 대기해야 한다. 스레드가 공유자원의 배타적인 사용을 보장받기 위해서 임계 구역에 들어가거나 나올 때는 세마포어 같은 동기화 매커니즘이 사용된다.

 

락 기법

-synchronized 을 통해서 해당 자원은 독점시키는 방법

 

등등으로 해결한다 .

 

굉장히 많은 상황에서 데이터의 변환이나 이상현상이 발생하는 경우가 있다. 그래서 데이터의 무결성을 확보하는 것에 신경 써야한다.

 

반응형

댓글