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