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 одинаков для всех указателей одного типа.

Это обобщенная функция , определенная для всех атомарных типов объектов A . Аргументом является указатель на volatile атомарный тип для принятия адресов как не-volatile, так и volatile (например, отображенных в памяти I/O) атомарных объектов, и семантика volatile сохраняется при применении этой операции к volatile атомарным объектам.

Не определено, является ли имя обобщённой функции макросом или идентификатором, объявленным с внешней линковкой. Если определение макроса подавляется для доступа к реальной функции (например, заключено в скобки как ( atomic_is_lock_free ) ( ... ) ), или программа определяет внешний идентификатор с именем обобщённой функции, поведение не определено.

Содержание

Параметры

obj - указатель на атомарный объект для проверки

Возвращаемое значение

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 Applied to Behavior as published Correct behavior
DR 465 C11 эта функция была пообъектной эта функция является потиповой

Ссылки

  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.17.5.1 Универсальная функция atomic_is_lock_free (стр: 205)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.17.5.1 Универсальная функция atomic_is_lock_free (стр: 280)

Смотрите также

указывает, что данный атомарный тип является свободным от блокировок
(макроконстанта)
Документация C++ для atomic_is_lock_free