odpowiednik x86 dla LWARX i STWCX

Szukam odpowiednika LWARX i STWCX (jak w procesorach PowerPC) lub sposobu na wdrożenie podobnej funkcjonalności na platformie x86. Ponadto, gdzie byłoby najlepsze miejsce, aby dowiedzieć się o takich rzeczach (np. Dobre artykuły / strony internetowe / fora do blokowania / programowania bez oczekiwania).

Edytować
Myślę, że muszę podać więcej szczegółów, ponieważ zakłada się, że szukam tylko operacji CAS (porównaj i zamień). Próbuję zaimplementować system zliczania referencji bez blokowania za pomocą inteligentnych wskaźników, do których można uzyskać dostęp i zmienić je za pomocą wielu wątków. W zasadzie potrzebuję sposobu na zaimplementowanie następującej funkcji na procesorze 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;
}

Naprawdę potrzebuję czegoś, co naśladuje LWARX i STWCX dość dokładnie, aby to wyłączyć (nie mogę znaleźć sposobu, aby to zrobić za pomocą funkcji CompareExchange, zamiany lub dodania funkcji, które do tej pory znalazłem dla x86).

Dzięki

questionAnswers(6)

yourAnswerToTheQuestion