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).

Спасибо

Ответы на вопрос(6)

Ваш ответ на вопрос