atomic_kill_dependency
atomic_kill_dependency (의존성 제거)
std::kill_dependency는 memory_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);
}