x86-Äquivalent für LWARX und STWCX

Ich suche nach einem Äquivalent von LWARX und STWCX (wie es auf den PowerPC-Prozessoren zu finden ist) oder nach einer Möglichkeit, ähnliche Funktionen auf der x86-Plattform zu implementieren. Außerdem, wo wäre der beste Ort, um sich über solche Dinge zu informieren (d. H. Gute Artikel / Websites / Foren für das sperren / wartefreie Programmieren).

Bearbeiten
Ich denke, ich muss möglicherweise weitere Details angeben, da davon ausgegangen wird, dass ich nur nach einer CAS-Operation (Compare and Swap) suche. Ich versuche, ein sperrfreies Referenzzählsystem mit intelligenten Zeigern zu implementieren, auf die von mehreren Threads zugegriffen und diese geändert werden können. Grundsätzlich brauche ich eine Möglichkeit, die folgende Funktion auf einem x86-Prozessor zu implementieren.

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;
}

Ich brauche wirklich etwas, das LWARX und STWCX ziemlich genau nachahmt, um dies zu erreichen (ich kann keine Möglichkeit finden, dies mit CompareExchange zu tun, Funktionen auszutauschen oder Funktionen hinzuzufügen, die ich bisher für x86 gefunden habe).

Vielen Dank

Antworten auf die Frage(6)

Ihre Antwort auf die Frage