memory

memory (메모리 모델)

C++의 메모리 모델 문서로, 스레드가 공유 메모리에 접근할 때의 순서와 데이터 경쟁 규칙을 설명해요. <atomic>과 밀접하게 연관돼요.

출처: cppreference

본문

memory 페이지는 C++ 메모리 모델(memory model)을 다뤄요. 이는 "스레드가 언제 다른 스레드의 변경을 볼 수 있는가"를 정의하는 규칙 체계예요.

핵심 개념을 정리하면:

  • 데이터 경쟁(data race): 두 스레드가 같은 메모리 위치에 각각 접근하되, 하나 이상이 쓰기이고, 접근 사이에 동기화가 없을 때 발생해요. C++에서 데이터 경쟁은 미정의 동작(UB)이에요.
  • happens-before: 한 접근이 다른 접근보다 "먼저 일어난다"가 보장되는 관계예요. 이를 통해 순서가 확정돼요.
  • 메모리 순서(std::memory_order): relaxed, acquire, release, acq_rel, seq_cst 등으로 atomic 연산의 순서 보장을 지정해요.
  • 동기화(synchronization): release-요구 연산과 acquire 연산 쌍으로 스레드 간에 데이터를 안전하게 전달해요.

간단히 말해, atomic/뮤텍스로 공유 데이터를 보호하지 않으면 데이터 경쟁이 되고, 잘못된 접근 순서 가정은 미정의 동작을 불러요.

이 규칙들을 이해하는 것은 멀티스레드 프로그래밍의 정확성을 위한 기초예요. 대부분의 코드는 기본(seq_cst)이나 acq_rel까지만 알아도 충분하지만, 저수준 최적화를 하려면 더 깊이 이해해야 해요.

더 알아보기 (Learn more)

cppreference