Преди C11
C библиотеката няма такива.
В Linux gcc предоставя някои -- потърсете __sync_fetch_and_add
, __sync_fetch_and_sub
и т.н.
В случай на Windows потърсете InterlockedIncrement
, InterlockedDecrement``,
InterlockedExchange` и т.н. Ако използвате gcc в Windows, предполагам, че той също има същите вградени функции, както в Linux (въпреки че не съм проверил това).
От Solaris ще зависи. Предполага се, че ако използвате gcc, той вероятно (отново) ще има същите вградени функции, както под Linux. Иначе има библиотеки, които се носят наоколо, но нищо наистина стандартизирано.
C11
C11 добави (разумно) пълен набор от атомни операции и атомни типове. Операциите включват неща като atomic_fetch_add
и atomic_fetch_sum
(и *_explicit
версии на същите, които ви позволяват да посочите модела на подреждане, от който се нуждаете, където тези по подразбиране винаги използват memory_order_seq_cst
). Има и fence
функции, като atomic_thread_fence
и atomic_signal_fence
.
Типовете съответстват на всеки от нормалните цели числа - например atomic_int8_t
съответстващ на int8_t
и atomic_uint_least64_t
съответстващ на uint_least64_t
. Това са typedef
имена, дефинирани в <stdatomic.h>
. За да избегнете конфликти с всички съществуващи имена, можете да пропуснете заглавката; самият компилатор използва имена в пространството от имена на имплементатора (напр. _Atomic_uint_least32_t
вместо atomic_uint_least32_t
).
person
Jerry Coffin
schedule
20.02.2010