멀티코어와 동기화
RISC-V의 LR/SC(load-reserved/store-conditional)와 같은 명령 쌍에서, SC(조건부 스토어)가 실패하는 경우는 언제인가?
- ASC로 쓰는 값이 LR로 읽은 값과 같을 때
- BLR로 읽고 나서 SC까지의 사이에 다른 코어가 그 주소에 쓰는 등으로 예약이 상실되었을 때
- CLR과 SC 사이에 다른 명령을 하나라도 실행했을 때
정답과 해설 보기
정답: B. LR로 읽고 나서 SC까지의 사이에 다른 코어가 그 주소에 쓰는 등으로 예약이 상실되었을 때
LR은 값을 읽음과 동시에 그 주소를 「예약」합니다. 이후 SC로 쓸 때 예약이 유지되고 있으면 쓰고 성공하며, 다른 코어의 쓰기 등으로 예약이 상실되었다면 쓰지 않고 실패를 반환합니다. CAS가 값의 일치를 보는 데 비해 LR/SC는 쓰기가 있었는지를 보므로, 값이 한 번 바뀌었다가 원래대로 돌아온 경우도 감지할 수 있습니다. ARM에도 같은 명령 쌍이 있습니다.
- A. 같은 값을 써도 성공합니다.
- B. 맞습니다. 값이 아니라 쓰기가 있었는지를 봅니다.
- C. 짧은 처리라면 사이에 명령을 넣을 수 있습니다.