멀티코어와 동기화
데이터 레이스(data race)에 대한 설명으로 올바른 것은?
- A여러 스레드가 같은 변수를 동시에 읽기만 하는 상태
- B하나의 스레드가 같은 변수에 연속해서 두 번 쓰는 상태
- C여러 스레드가 같은 변수에 동기화 없이 동시에 접근하고, 적어도 하나가 쓰기인 상태
정답과 해설 보기
정답: C. 여러 스레드가 같은 변수에 동기화 없이 동시에 접근하고, 적어도 하나가 쓰기인 상태
데이터 레이스는 같은 위치에 대한 읽기·쓰기의 순서가 동기화로 정해져 있지 않아서, 어떤 순서로 실행되었는지에 따라 결과가 달라지는 상태입니다. 타이밍에 따라 일어나기도 하고 일어나지 않기도 하므로 테스트로 찾기 어려운 결함이 됩니다. C나 C++에서는 데이터 레이스가 있는 프로그램의 동작은 미정의(undefined)로 간주됩니다. 락이나 아토믹 변수로 순서를 정해야 합니다.
- A. 읽기만 한다면 값이 바뀌지 않으므로 문제없습니다.
- B. 하나의 스레드 안에서는 순서가 정해져 있습니다.
- C. 맞습니다. 결과가 실행할 때마다 달라지는 원인이 됩니다.