serversim
학습시뮬레이터템플릿가격
…
…
메뉴 열기
학습↗시뮬레이터↗템플릿↗가격↗
내 Documents문서
전체 목차/5장/5.434 / 40

5.4 · 캐시와 지역성

메모리 장벽은 어떤 순서를 지킬까?

코드에 먼저 쓴 값이 다른 코어에도 먼저 보인다고 믿어도 될까요?

컴파일러와 CPU는 성능을 위해 독립 명령을 재배치하고 캐시·저장 버퍼 때문에 보이는 시점도 달라질 수 있습니다.

먼저 생활 비유

깃발을 올리기 전 택배 상자 놓기

“상자를 다 놓은 뒤 완료 깃발을 올린다”는 규칙이 없으면 다른 사람이 깃발부터 보고 빈 선반을 볼 수 있습니다.

컴퓨터 예제로 바꾸기

데이터와 준비 플래그

data = 42;
ready = true;

release 저장과 acquire 읽기를 사용하면 ready를 본 스레드가 그보다 앞선 data 쓰기도 보도록 약속할 수 있습니다.

직접 움직여 보기1 / 5

지금 일어나는 변화

data 쓰기

코어 A가 자기 캐시나 저장 버퍼에 값을 씁니다.

가까운 곳에서 먼 곳으로data 쓰기단계 1ready 쓰기단계 2재정렬 가능성단계 3release·acquire단계 4data=42 관찰단계 5보이는 순서현재: data 쓰기

이 그림에서 기억할 한 문장

메모리 장벽은 시간을 멈추는 벽이 아니라 특정 메모리 연산 사이의 순서와 가시성을 제한하는 약속입니다.

현재 상태

이동하는 것
보이는 순서
현재 위치
data 쓰기
다음 위치
ready 쓰기

30초 확인 문제

메모리 장벽이 필요한 대표 상황은?

처음 보는 용어 두 개

메모리 장벽
메모리 연산의 재배치와 관찰 순서를 제한하는 명령
획득·해제
동기화 지점 전후의 메모리 가시성을 연결하는 의미론

이 절을 다 읽었다면

메모리 장벽은 시간을 멈추는 벽이 아니라 특정 메모리 연산 사이의 순서와 가시성을 제한하는 약속입니다.

← 이전 절

5.3 거짓 공유는 왜 다중 스레드를 느리게 할까?

다음 절 →

6.1 CPU는 입출력 장치와 어떻게 대화할까?