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로 보장됨 }