2010-01-24 13 views
22

Sarebbe una domanda molto semplice (potrebbe essere duplicata), ma non sono riuscito a trovarla.Equivalente di InterlockedIncrement in Linux/gcc

API Win32 fornisce un insieme molto utile di operazioni atomiche (come intrinseche) come InterlockedIncrement che emette il codice lock add x86. Inoltre, InterlockedCompareExchange è mappato su lock cmpxchg.

Ma, voglio farlo in Linux con gcc. Poiché sto lavorando a 64 bit, è impossibile utilizzare l'assembly inline. Esistono elementi intrinseci per gcc?

+0

Si potrebbe voler cercare "gcc incremento interblocco" o "incremento linux interblocco" (http://stackoverflow.com/questions/149710/interlocked-equivalent-on-linux) –

risposta

29
+0

Grazie! '__sync_fetch_and_add' era quello. – minjang

+15

In realtà, l'equivalente di InterlockedIncrement() sarebbe __sync_add_and_fetch(). __sync_fetch_and_add() restituisce il valore precedente, diversamente da InterlockedIncrement() che restituisce il nuovo valore. – noamtm