콘텐츠로 이동

메모리 배리어 (Memory Barrier)

Jan 27, 2026

메모리 배리어(Memory Barrier)는 메모리 연산의 순서를 강제하여 명령어 재정렬을 방지하는 하드웨어 명령어이다. 현대 프로세서와 컴파일러는 성능 최적화를 위해 의존성 없는 명령어를 재정렬하는데, 단일 스레드에서는 문제없지만 멀티스레드 환경에서는 예상치 못한 결과가 발생한다.

비유하면, 줄서기 바리케이드와 같다. 바리케이드 전에 온 사람들이 모두 통과해야 바리케이드 뒤의 사람들이 이동할 수 있다.

Memory barrier 명령 실행 시:

  • 그 이전의 모든 load/store가 완료됨을 보장
  • Barrier 이후의 load/store는 barrier 이전 명령보다 먼저 실행되지 않음
  • 다른 프로세서에도 메모리 변경 사항이 전파됨
유형설명
Strongly Ordered한 프로세서의 메모리 수정이 즉시 다른 모든 프로세서에 보임
Weakly Ordered메모리 수정이 다른 프로세서에 즉시 보이지 않을 수 있음
// Thread 2
x = 100;
flag = true;
// 프로세서가 flag = true를 먼저 실행할 수 있음!
// Thread 1
while (!flag);
print x; // 0이 출력될 수 있음
// Thread 2
x = 100;
memory_barrier(); // x=100이 완료된 후에만 다음 실행
flag = true;
// Thread 1
while (!flag)
memory_barrier(); // flag 로드 후에만 x 로드
print x; // 100 출력 보장
flag[i] = true;
memory_barrier(); // 재정렬 방지
turn = j;