Standart C Programlama Dili


9.16. stdatomic.h: Atomik İşlemler

Bu dosya, birden fazla iş parçacığı tarafından paylaşılan veriler üzerinde atomik işlemler yapabilmek için gerekli olan tip tanımlarını ve fonksiyon bildirimlerini içerir. Eğer derleyici tarafından __STDC_NO_ATOMICS__ makrosu tanımlanmışsa, o zaman burada anlatılan özelliklerin desteklenmesine ve stdatomic.h başlık dosyasının o ortamda tanımlanmasına gerek yoktur.

Aşağıda tanımlanan makrolar #if önişlemci emirlerinde kullanılabilir:

ATOMIC_BOOL_LOCK_FREE
ATOMIC_CHAR_LOCK_FREE
ATOMIC_CHAR16_T_LOCK_FREE
ATOMIC_CHAR32_T_LOCK_FREE
ATOMIC_WCHAR_T_LOCK_FREE
ATOMIC_SHORT_LOCK_FREE
ATOMIC_INT_LOCK_FREE
ATOMIC_LONG_LOCK_FREE
ATOMIC_LLONG_LOCK_FREE
ATOMIC_POINTER_LOCK_FREE

Diğer makrolar:

ATOMIC_FLAG_INIT
ATOMIC_VAR_INIT(C deger)
tip kill_dependency(tip y)

Tip tanımları:

atomic_flag
memory_order

Sayım tipi memory_order için sayıcılar şöyledir: memory_order_relaxed, memory_order_consume, memory_order_acquire, memory_order_release, memory_order_acq_rel, memory_order_seq_cst.

Genel özellikli fonksiyonlar:

void   atomic_init(volatile A * nesne, C deger);
void   atomic_thread_fence(memory_order sira)
void   atomic_signal_fence(memory_order sira)
_Bool  atomic_is_lock_free(const volatile A * nesne)
void   atomic_store(volatile A * nesne, C istenen)
void   atomic_store_explicit(volatile A * nesne, C istenen, memory_order sira)
C      atomic_load(const volatile A * nesne)
C      atomic_load_explicit(const volatile A * nesne, memory_order sira)
C      atomic_exchange(volatile A * nesne, C istenen)
C      atomic_exchange_explicit(volatile A * nesne, C istenen,
         memory_order sira)
_Bool  atomic_compare_exchange_strong(volatile A * nesne, C * beklenen,
         C istenen)
_Bool  atomic_compare_exchange_strong_explicit(volatile A * nesne, C * beklenen,
         C istenen, memory_order basari, memory_order basarisizlik)
_Bool  atomic_compare_exchange_weak(volatile A * nesne, C * beklenen,
         C istenen)
_Bool  atomic_compare_exchange_weak_explicit(volatile A * nesne, C * beklenen,
         C istenen, memory_order basari, memory_order basarisizlik)
C      atomic_fetch_anahtar(volatile A * nesne, M islenen)
C      atomic_fetch_anahtar_explicit(volatile A * nesne, M islenen,
         memory_order sira)
_Bool  atomic_flag_test_and_set(volatile atomic_flag * nesne)
_Bool  atomic_flag_test_and_set_explicit(volatile atomic_flag * nesne,
         memory_order sira)
void   atomic_flag_clear(volatile atomic_flag * nesne)
void   atomic_flag_clear_explicit(volatile atomic_flag * nesne,
         memory_order sira)

Yukarıdaki makro ve fonksiyon bildirimlerinde:

  • A bir atomik tipi gösterir.
  • C, karşılığındaki, atomik olmayan tipi gösterir.
  • M, aritmetik işlemler için, diğer argümanın tipini gösterir.
  • anahtar’ın karşılığı, add için toplama, sub için çıkarma, or için bitsel VEYA, xor için bitsel dışlayan VEYA ve and için bitsel VE’dir.

Aşağıdaki listede sol sütunda verilen tipler, sağdaki tiplerin karşılığı olarak bu dosyada tanımlanırlar:

atomic_bool            _Atomic _Bool
atomic_char            _Atomic char
atomic_schar           _Atomic signed char
atomic_uchar           _Atomic unsigned char
atomic_short           _Atomic short
atomic_ushort          _Atomic unsigned short
atomic_int             _Atomic int
atomic_uint            _Atomic unsigned int
atomic_long            _Atomic long
atomic_ulong           _Atomic unsigned long
atomic_llong           _Atomic long long
atomic_ullong          _Atomic unsigned long long
atomic_char16_t        _Atomic char16_t
atomic_char32_t        _Atomic char32_t
atomic_wchar_t         _Atomic wchar_t
atomic_int_least8_t    _Atomic int_least8_t
atomic_uint_least8_t   _Atomic uint_least8_t
atomic_int_least16_t   _Atomic int_least16_t
atomic_uint_least16_t  _Atomic uint_least16_t
atomic_int_least32_t   _Atomic int_least32_t
atomic_uint_least32_t  _Atomic uint_least32_t
atomic_int_least64_t   _Atomic int_least64_t
atomic_uint_least64_t  _Atomic uint_least64_t
atomic_int_fast8_t     _Atomic int_fast8_t
atomic_uint_fast8_t    _Atomic uint_fast8_t
atomic_int_fast16_t    _Atomic int_fast16_t
atomic_uint_fast16_t   _Atomic uint_fast16_t
atomic_int_fast32_t    _Atomic int_fast32_t
atomic_uint_fast32_t   _Atomic uint_fast32_t
atomic_int_fast64_t    _Atomic int_fast64_t
atomic_uint_fast64_t   _Atomic uint_fast64_t
atomic_intptr_t        _Atomic intptr_t
atomic_uintptr_t       _Atomic uintptr_t
atomic_size_t          _Atomic size_t
atomic_ptrdiff_t       _Atomic ptrdiff_t
atomic_intmax_t        _Atomic intmax_t
atomic_uintmax_t       _Atomic uintmax_t