레이스 컨디션 (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 을 통해서 해당 자원은 독점시키는 방법
등등으로 해결한다 .
굉장히 많은 상황에서 데이터의 변환이나 이상현상이 발생하는 경우가 있다. 그래서 데이터의 무결성을 확보하는 것에 신경 써야한다.
★★★★☆
'지식 > 잡학지식' 카테고리의 다른 글
잡학지식) 죄수의 딜레마 (0) | 2019.10.24 |
---|---|
잡학지식) 무결성 (0) | 2019.10.21 |
잡학지식) 초두효과 (0) | 2019.10.17 |
잡학지식) 목표 및 핵심 결과지표 OKR(Objectives and Key Results) (0) | 2019.10.16 |
잡학지식) 카니발 효과 (자기 잠식효과 : Cannibalization) (0) | 2019.10.15 |
댓글