Equivalente a x86 para LWARX y STWCX
Estoy buscando un equivalente de LWARX y STWCX (como se encuentra en los procesadores PowerPC) o una forma de implementar una funcionalidad similar en la plataforma x86. Además, ¿dónde sería el mejor lugar para averiguar sobre tales cosas (es decir, buenos artículos / sitios web / foros para la programación de bloqueo / espera libre).
Editar
Creo que debo dar más detalles, ya que se supone que solo estoy buscando una operación CAS (comparar e intercambiar). Lo que estoy tratando de hacer es implementar un sistema de conteo de referencias sin bloqueo con punteros inteligentes a los que se puede acceder y cambiar mediante varios subprocesos. Básicamente necesito una forma de implementar la siguiente función en un procesador x86.
int* IncrementAndRetrieve(int **ptr) { int val; int *pval; do { // fetch the pointer to the value pval = *ptr; // if its NULL, then just return NULL, the smart pointer // will then become NULL as well if(pval == NULL) return NULL; // Grab the reference count val = lwarx(pval); // make sure the pointer we grabbed the value from // is still the same one referred to by 'ptr' if(pval != *ptr) continue; // Increment the reference count via 'stwcx' if any other threads // have done anything that could potentially break then it should // fail and try again } while(!stwcx(pval, val + 1)); return pval; }
Realmente necesito algo que imite a LWARX y STWCX con bastante precisión para lograr esto (no puedo encontrar una manera de hacerlo con el Intercambio de Comparar, intercambiar o agregar funciones que he encontrado hasta ahora para el x86).
Gracias