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 veand
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