atomic_atomic_thread_fence

atomic_atomic_thread_fence (메모리 펜스)

std::atomic_thread_fence는 원자적 연산과 연결되지 않은 채 메모리 동기화 순서를 설정해요. 원자적 연산들의 재배치 순서를 제어해요.

출처: cppreference

본문

std::atomic_thread_fence<atomic> 헤더에 정의된 자유 함수예요.

extern "C" void atomic_thread_fence( std::memory_order order ) noexcept;

order가 지시하는 대로 비원자적 접근과 relaxed 원자적 접근의 메모리 동기화 순서를 설정해요. 연관된 원자적 연산 없이 동작하지만, 동기화를 성립하려면 적어도 하나의 원자적 연산이 필요해요.

  • release 펜스 — 한 스레드 A의 release 펜스는 다른 스레드 B의 acquire 연산과 동기화돼요.
  • acquire 펜스 — 한 스레드의 acquire 펜스는 다른 스레드의 release 연산과 동기화돼요.
  • seq_cst 펜스 — 전체 순서를 설정해요.

예제 (Example)

#include <atomic>
#include <thread>

std::atomic<bool> ready{false};
int data = 0;

void writer() { data = 42; std::atomic_thread_fence(std::memory_order_release);
                ready.store(true, std::memory_order_relaxed); }
void reader() { while (!ready.load(std::memory_order_relaxed));
                std::atomic_thread_fence(std::memory_order_acquire);
                // data는 42로 보장됨 }

더 알아보기 (Learn more)

cppreference