atomic_is_lock_free
atomic_is_lock_free (무잠금 여부 확인)
atomic 타입/객체가 무잠금(lock-free)으로 구현됐는지 확인하는 함수와 매크로예요. <atomic> 헤더, C++11부터.
출처: cppreference
본문
atomic_is_lock_free는 주어진 atomic 객체가 무잠금으로 구현됐는지 판정해요.
template< class T >
bool atomic_is_lock_free( const volatile std::atomic<T>* obj ) noexcept; // (1)
template< class T >
bool atomic_is_lock_free( const std::atomic<T>* obj ) noexcept; // (2)
객체가 무잠금이면 true, 아니면 false를 반환해요. 즉 "이 atomic에 락(예: 내부 뮤텍스)이 사용되는가"를 알려줘요. 무잠금일수록 원자 연산이 가볍고 성능이 좋아요.
또한 타입별 컴파일 타임 상수 매크로가 있어요.
#define ATOMIC_INT_LOCK_FREE /* unspecified */
#define ATOMIC_LONG_LOCK_FREE /* unspecified */
#define ATOMIC_POINTER_LOCK_FREE /* unspecified */
이 매크로 값은 0(절대 무잠금 아님), 1(때로 무잠금), 2(항상 무잠금) 중 하나예요.
핵심 타입(정수, 포인터 등)은 거의 항상 무잠금이라 성능상 걱정이 없지만, 사용자 정의 타입이나 큰 타입은 내부적으로 락을 쓸 수 있어요. 실시간/고성능 코드에서 atomic의 무잠금 보장이 중요할 땐 이 함수나 매크로로 미리 확인하면 돼요. 멤버 버전 obj.is_lock_free()도 동일해요.