equivalente a x86 para LWARX e STWCX
Eu estou procurando um equivalente de LWARX e STWCX (como encontrado nos processadores PowerPC) ou uma maneira de implementar uma funcionalidade semelhante na plataforma x86. Além disso, onde seria o melhor lugar para descobrir sobre essas coisas (ou seja, bons artigos / sites / fóruns para a programação de bloqueio / espera-livre).
Editar
Eu acho que talvez precise dar mais detalhes, pois está sendo assumido que estou apenas procurando por uma operação CAS (compare e troque). O que estou tentando fazer é implementar um sistema de contagem de referência livre de bloqueio com ponteiros inteligentes que podem ser acessados e alterados por vários threads. Eu basicamente preciso de uma maneira de implementar a seguinte função em um processador 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; }
Eu realmente preciso de algo que imita o LWARX e o STWCX com bastante precisão (não consigo descobrir uma maneira de fazer isso com o CompareExchange, trocar ou adicionar funções que até agora encontrei para o x86).
obrigado