멀티코어와 동기화

데이터 레이스(data race)에 대한 설명으로 올바른 것은?

  1. A여러 스레드가 같은 변수를 동시에 읽기만 하는 상태
  2. B하나의 스레드가 같은 변수에 연속해서 두 번 쓰는 상태
  3. C여러 스레드가 같은 변수에 동기화 없이 동시에 접근하고, 적어도 하나가 쓰기인 상태
정답과 해설 보기

정답: C. 여러 스레드가 같은 변수에 동기화 없이 동시에 접근하고, 적어도 하나가 쓰기인 상태

데이터 레이스는 같은 위치에 대한 읽기·쓰기의 순서가 동기화로 정해져 있지 않아서, 어떤 순서로 실행되었는지에 따라 결과가 달라지는 상태입니다. 타이밍에 따라 일어나기도 하고 일어나지 않기도 하므로 테스트로 찾기 어려운 결함이 됩니다. C나 C++에서는 데이터 레이스가 있는 프로그램의 동작은 미정의(undefined)로 간주됩니다. 락이나 아토믹 변수로 순서를 정해야 합니다.

  • A. 읽기만 한다면 값이 바뀌지 않으므로 문제없습니다.
  • B. 하나의 스레드 안에서는 순서가 정해져 있습니다.
  • C. 맞습니다. 결과가 실행할 때마다 달라지는 원인이 됩니다.
이 분야 연습하기 분야로 돌아가기

멀티코어와 동기화의 다른 문제

  1. 위 코드를 두 스레드에서 동시에 실행하면 counter의 최종 값이 200000보다 작아지는 경우가 있다. 그 이유로 올바른 것은?
  2. 아토믹 명령(atomic instruction, 불가분 명령)에 대한 설명으로 올바른 것은?
  3. 아토믹 명령 CAS(compare-and-swap)의 동작으로 올바른 것은?
  4. 위 코드는 CAS(&p, 기대값, 새 값)를 사용하여 공유 변수 counter를 2배로 만들고 있다. CAS가 실패하여 루프를 다시 도는 경우는 언제인가?
  5. RISC-V의 LR/SC(load-reserved/store-conditional)와 같은 명령 쌍에서, SC(조건부 스토어)가 실패하는 경우는 언제인가?

이 분야의 비교