멀티코어와 동기화

RISC-V의 LR/SC(load-reserved/store-conditional)와 같은 명령 쌍에서, SC(조건부 스토어)가 실패하는 경우는 언제인가?

  1. ASC로 쓰는 값이 LR로 읽은 값과 같을 때
  2. BLR로 읽고 나서 SC까지의 사이에 다른 코어가 그 주소에 쓰는 등으로 예약이 상실되었을 때
  3. CLR과 SC 사이에 다른 명령을 하나라도 실행했을 때
정답과 해설 보기

정답: B. LR로 읽고 나서 SC까지의 사이에 다른 코어가 그 주소에 쓰는 등으로 예약이 상실되었을 때

LR은 값을 읽음과 동시에 그 주소를 「예약」합니다. 이후 SC로 쓸 때 예약이 유지되고 있으면 쓰고 성공하며, 다른 코어의 쓰기 등으로 예약이 상실되었다면 쓰지 않고 실패를 반환합니다. CAS가 값의 일치를 보는 데 비해 LR/SC는 쓰기가 있었는지를 보므로, 값이 한 번 바뀌었다가 원래대로 돌아온 경우도 감지할 수 있습니다. ARM에도 같은 명령 쌍이 있습니다.

  • A. 같은 값을 써도 성공합니다.
  • B. 맞습니다. 값이 아니라 쓰기가 있었는지를 봅니다.
  • C. 짧은 처리라면 사이에 명령을 넣을 수 있습니다.
이 분야 연습하기 분야로 돌아가기

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

  1. CAS를 사용한 락프리 자료구조에서 문제가 되는 ABA 문제에 대한 설명으로 올바른 것은?
  2. RISC-V의 amoadd.w 명령이나 x86의 lock xadd 명령과 같은 fetch-and-add 명령의 동작으로 올바른 것은?
  3. 스핀락(spinlock)에 대한 설명으로 올바른 것은?
  4. 스핀락이 적합하지 않은 상황으로 가장 적절한 것은?
  5. 스핀락에서 락 변수를 곧바로 아토믹 명령으로 갱신하려 하지 않고, 평소에는 일반 읽기로 풀리기를 기다리다가 풀린 것으로 보일 때만 아토믹 명령을 사용하는 방식(test-and-test-and-set)의 이유로 올바른 것은?

이 분야의 비교