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