2010-01-24 16 views
22

Sería una pregunta muy simple (podría duplicarse), pero no pude encontrarla.Equivalente de InterlockedIncrement en Linux/gcc

Win32 API proporciona un conjunto muy útil de operaciones atómicas (como intrínsecas) como InterlockedIncrement que emite lock add código x86. Además, InterlockedCompareExchange está mapeado a lock cmpxchg.

Pero, quiero hacer eso en Linux con gcc. Como estoy trabajando en 64 bits, es imposible usar el ensamblaje en línea. ¿Hay intrínsecos para gcc?

+0

Es posible que desee buscar en "gcc incremento de enclavamiento" o "Linux incremento de enclavamiento" (http://stackoverflow.com/questions/149710/interlocked-equivalent-on-linux) –

Respuesta

29
+0

Gracias! '__sync_fetch_and_add' fue el elegido. – minjang

+15

En realidad, el equivalente de InterlockedIncrement() sería __sync_add_and_fetch(). __sync_fetch_and_add() devuelve el valor anterior, a diferencia de InterlockedIncrement() que devuelve el nuevo valor. – noamtm