Pregunta

Sé que en los sistemas / POSIX MacOSX, hay atómica de comparación y de intercambio para / de código C ++ C ++ a través de g.

Sin embargo, no necesito la compara - Sólo quiero intercambiar atómicamente dos valores. ¿Hay una operación de intercambio atómico disponibles? [Everythign que puedo encontrar es atomic_compare_and_swap ... y sólo quiero hacer el canje, sin comparar].

Gracias!

¿Fue útil?

Solución

las instrucciones de montaje de "bloqueo xchg" Intel probablemente logra lo que quiere, pero no creo que hay una función GCC envoltorio para que sea portátil. Para ello su pegada usando ensamblador en línea (no portátiles) o el uso de comparar y de intercambio y obligando al comparar para ser verdad (inneficient). Esperamos que esto ayude: -)

Otros consejos

GCC proporciona esta operación en algunos procesadores, bajo la __sync_lock_test_and_set (confusamente llamado). A partir de la documentación de GCC:

 This builtin, as described by Intel, is not a traditional
 test-and-set operation, but rather an atomic exchange operation.
 It writes VALUE into `*PTR', and returns the previous contents of
 `*PTR'.

 Many targets have only minimal support for such locks, and do not
 support a full exchange operation.  In this case, a target may
 support reduced functionality here by which the _only_ valid value
 to store is the immediate constant 1.  The exact value actually
 stored in `*PTR' is implementation defined.

Sin embargo, la operación de intercambio completo se apoya en x86-32 y x86-64, de forma efectiva a la envoltura lock xchg que de otro modo debería escribir.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top