Namespaces
Variants

atomic_is_lock_free

From cppreference.net
헤더 파일에 정의됨 <stdatomic.h>
_Bool atomic_is_lock_free ( const volatile A * obj ) ;
(C11 이후)

타입 A ( obj 가 가리키는 객체의 타입)의 모든 객체에 대한 원자 연산이 잠금 없는 방식인지 결정합니다. 주어진 프로그램 실행에서, atomic_is_lock_free 호출 결과는 동일한 타입의 모든 포인터에 대해 동일합니다.

이것은 모든 generic function 에 대해 정의된 atomic object types A 입니다. 인자는 volatile 및 비-volatile 원자 객체의 주소를 모두 수용하기 위해 volatile 원자 타입에 대한 포인터이며, volatile 원자 객체에 이 연산을 적용할 때 volatile 의미론이 유지됩니다.

제네릭 함수의 이름이 매크로인지 외부 링크를 가진 식별자로 선언되었는지는 명시되지 않습니다. 실제 함수에 접근하기 위해 매크로 정의를 억제하는 경우(예: ( atomic_is_lock_free ) ( ... ) 와 같이 괄호로 묶은 경우), 또는 프로그램이 제네릭 함수의 이름으로 외부 식별자를 정의하는 경우, 그 동작은 정의되지 않습니다.

목차

매개변수

obj - 검사할 atomic 객체에 대한 포인터

반환값

true 만약 해당 타입 A 의 모든 객체 연산이 lock-free인 경우, false 그렇지 않은 경우.

예제

#include <stdio.h>
#include <stdatomic.h>
_Atomic struct A { int a[100]; } a;
_Atomic struct B { int x, y; } b;
int main(void)
{
    printf("_Atomic struct A is lock free? %s\n", 
            atomic_is_lock_free(&a) ? "true" : "false");
    printf("_Atomic struct B is lock free? %s\n", 
            atomic_is_lock_free(&b) ? "true" : "false");
}

가능한 출력:

_Atomic struct A is lock free? false
_Atomic struct B is lock free? true

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
DR 465 C11 이 함수는 객체별(object-specific)이었음 이 함수는 타입별(type-specific)임

참고문헌

  • C17 표준 (ISO/IEC 9899:2018):
  • 7.17.5.1 atomic_is_lock_free 제네릭 함수 (p: 205)
  • C11 표준 (ISO/IEC 9899:2011):
  • 7.17.5.1 atomic_is_lock_free 제네릭 함수 (p: 280)

참고 항목

주어진 원자적 타입이 잠금 없는 방식임을 나타냅니다
(매크로 상수)
C++ 문서 for atomic_is_lock_free