atomic_thread_fence
atomic_thread_fence (스레드 메모리 펜스)
연관된 atomic 연산 없이, 비원자적 및 relaxed atomic 접근의 메모리 동기화 순서를 세우는 펜스예요. <atomic> 헤더, C++11부터.
출처: cppreference
본문
atomic_thread_fence는 order가 지시하는 대로 메모리 동기화 순서를 세워요. 단, 실제 동기화를 성립시키려면 아래 설명처럼 최소한 하나의 atomic 연산이 필요해요.
extern "C" void atomic_thread_fence( std::memory_order order ) noexcept;
펜스-원자 동기화
스레드 A의 해제 펜스 F가 스레드 B의 원자 획득 연산 Y와 동기화되려면 다음 조건을 만족해야 해요.
- 어떤 원자 저장 X가 존재하고,
- Y가 X가 쓴 값을 읽으며(또는 X가 해제 연산이었다면 X가 이끄는 해제 시퀀스가 쓸 값),
- A 스레드에서 F가 X보다 앞서(sequenced-before) 실행돼요.
이 경우 A에서 F보다 앞서 실행된 모든 비원자적 및 relaxed 원자 저장은, B에서 Y보다 뒤에 실행되는 모든 비원자적 및 relaxed 원자 읽기보다 앞서(happen-before) 실행돼요.
매개변수
order: 이 펜스가 실행하는 메모리 순서.std::memory_order_relaxed면 아무 효과가 없어요.- 반환 값: 없음.
단순히 load/store에 acquire/release 순서를 붙이는 것보다, 펜스를 쓰면 다수의 접근에 대해 순서를 집합적으로 부여할 수 있어요. 미묘한 동기화 최적화에 쓰이며, 대부분의 경우 atomic 연산 자체에 순서를 지정하는 편이 더 단순해요.