atomic_kill_dependency

atomic_kill_dependency (의존성 제거)

std::kill_dependencymemory_order_consume 원자적 로드로 시작된 의존성 트리가 반환값 너머로 확장되지 않도록 컴파일러에 알려줘요. 불필요한 메모리 배리어를 피하는 데 써요.

출처: cppreference

본문

std::kill_dependency<atomic> 헤더에 정의된 자유 함수예요. C++11부터 사용 가능하며 C++26에서 deprecated예요.

template< class T >
T kill_dependency( T y ) noexcept;

std::memory_order_consume 원자적 로드 연산으로 시작된 의존성 트리가 std::kill_dependency의 반환값을 넘어서 확장되지 않음을 컴파일러에 알려줘요. 즉 인자가 반환값에 의존성을 전달하지 않아요. 이를 이용해 불필요한 std::memory_order_acquire 펜스를 피할 수 있어요.

예제 (Example)

#include <atomic>
#include <cstdint>

struct Node { std::uintptr_t next; };
extern std::atomic<Node*> node;

// consume 로드로 시작한 의존성을 kill_dependency로 끊는다
std::uintptr_t get_next(std::uintptr_t p)
{
    return std::kill_dependency(p);
}

더 알아보기 (Learn more)

cppreference