Spec-Zone.ru › C

atomic_is_lock_free

Определено в заголовочном файле <stdatomic.h>
_Bool atomic_is_lock_free( const volatile A* obj );
(с C11)

Определяет, являются ли атомные операции над всеми объектами типа A (тип объекта, на который указывает obj) без блокировки. В любой выполнение программы результат вызова atomic_is_lock_free одинаков для всех указателей одного и того же типа.

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

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

Параметры

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

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

true если операции над всеми объектами типа A выполняются без блокировки, 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 эта функция была по объекту эта функция по типу

Ссылки

  • Стандарт 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)

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/atomic/atomic_is_lock_free

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API