x86 эквивалент для LWARX и STWCX
Я ищу эквивалент LWARX и STWCX (как на процессорах PowerPC) или способ реализации аналогичной функциональности на платформе x86. Кроме того, где было бы лучшее место, чтобы узнать о таких вещах (то есть хорошие статьи / веб-сайты / форумы для блокировки / программирования без ожидания).
Edit
Я думаю, что мне, возможно, потребуется дать более подробную информацию, поскольку предполагается, что я просто ищу операцию CAS (сравнение и своп). То, что я пытаюсь сделать, - это реализовать систему подсчета ссылок без блокировки с помощью интеллектуальных указателей, которые могут быть доступны и изменены несколькими потоками. Мне в основном нужен способ реализовать следующую функцию на процессоре 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; }
Мне действительно нужно что-то, что достаточно точно имитирует LWARX и STWCX, чтобы осуществить это (я не могу найти способ сделать это с помощью функций CompareExchange, swap или add, которые я до сих пор нашел для x86).
Спасибо