atomic_thread_fence

atomic_thread_fence (스레드 메모리 펜스)

연관된 atomic 연산 없이, 비원자적 및 relaxed atomic 접근의 메모리 동기화 순서를 세우는 펜스예요. <atomic> 헤더, C++11부터.

출처: cppreference

본문

atomic_thread_fenceorder가 지시하는 대로 메모리 동기화 순서를 세워요. 단, 실제 동기화를 성립시키려면 아래 설명처럼 최소한 하나의 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/storeacquire/release 순서를 붙이는 것보다, 펜스를 쓰면 다수의 접근에 대해 순서를 집합적으로 부여할 수 있어요. 미묘한 동기화 최적화에 쓰이며, 대부분의 경우 atomic 연산 자체에 순서를 지정하는 편이 더 단순해요.

더 알아보기 (Learn more)

cppreference