Funzioni di confronto e scambio (CAS) di alto livello?
-
02-07-2019 - |
Domanda
Vorrei documentare quali funzioni o macro di alto livello (ovvero C ++ non in linea) sono disponibili per le primitive atomiche Compare And Swap (CAS) ...
Ad esempio, WIN32 su x86 ha una famiglia di funzioni _InterlockedCompareExchange
nell'intestazione <_intrin.h>
.
Soluzione
Consentirò ad altri di elencare le varie API specifiche della piattaforma, ma per riferimento futuro in C ++ 09 otterrai
atomic_compare_exchange()
operazione nella nuova " Libreria delle operazioni atomiche " ;.
Altri suggerimenti
glib, una libreria di sistema comune su sistemi Linux e Unix (ma supportata anche su Windows e Mac OS X), definisce diverse operazioni atomiche , tra cui g_atomic_int_compare_and_exchange e g_atomic_pointer_compare_and_exchange .
GCC ha alcuni built-in per accessi atomici anche.
Su Solaris c'è " atomic.h " (ad es. lt;! sys / atomic.h <> gt;. )
MacOS X ha OSAtomic.h
Ci sono stati una serie di articoli del gruppo di lavoro su questo argomento che proponevano modifiche alla libreria standard C ++. WG N2427 ( C ++ Tipi e operazioni atomici ) è il più recente, che contribuisce alla sezione 29 - Biblioteca di operazioni atomiche - dello standard in sospeso.
anche java ha questa operazione CAS
vedi qui
ci sono usi pratici per questo, come un hashtable senza lock utilizzato nel sistema multiprocessore