Ich bin auf der Suche nach einem Äquivalent von LWARX und STWCX (wie auf den PowerPC-Prozessoren gefunden) oder eine Möglichkeit, ähnliche Funktionalität auf der x86-Plattform zu implementieren. Wo kann man sich am besten über solche Dinge informieren (d.h. gute Artikel/Webseiten/Foren für sperr- und wartungsfreie Programmierung)?
Editer
Ich glaube, ich muss mehr Details angeben, da angenommen 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 mehrere Threads zugreifen und sie ändern können. Ich brauche im Grunde 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 keinen Weg finden, dies mit den Funktionen CompareExchange, swap oder add zu tun, die ich bisher für x86 gefunden habe).
Danke