C++ 메모리 모델의 relaxed/acquire/release/seq_cst 순서를 happens-before 관점에서 실무적으로 해석합니다. 잘못된 relaxed 사용이 만드는 데이터 레이스 버그를 깨진 코드로 재현하고 ThreadSanitizer로 검증하는 절차를 다룹니다.
C++20 atomic::wait/notify로 스핀 폴링을 커널 대기로 바꾸는 패턴과 libstdc++의 futex 기반 구현을 다룹니다. notify 누락이 만드는 lost wakeup 버그를 재현하고, C++26 fetch_max/fetch_min 표준화 현황도 정리합니다.
C++20 std::barrier(재사용 가능한 동기 지점)와 std::latch(1회성 카운트다운)의 내부 동작과 비용을 다룹니다. phase·completion function 설계, mutex/condition_variable과의 선택 기준, 완화된 표준 보장(P2588R3)까지 정리합니다.
condition_variable의 spurious wakeup과 thundering herd 비용을 Mesa semantics 기원부터 다루고, predicate 루프·notify 선택·wait morphing으로 대기 비용을 줄이는 법과 atomic::wait/notify 대안을 비교합니다.