Как атомарно поменять местами 2 int в C #?

Что (если есть) является эквивалентом C # x86 asm xchg инструкция?

С помощью этой команды, которая, как мне кажется, является подлинным обменом (в отличие от Interlocked.Exchange ), я мог бы просто атомарно поменять местами два целых числа, что я и пытаюсь сделать.

Обновление:

Пример кода на основе моего предложения. Переменные с суффиксом "_V" оформлены как изменчивые:

// PART 3 - process links
// prepare the new Producer
address.ProducerNew.WorkMask_V = 0;
// copy the current LinkMask
address.ProducerNew.LinkMask_V = address.Producer.LinkMask_V;
// has another (any) thread indicated it dropped its message link from this thread?
if (this.routerEmptyMask[address.ID] != 0)
{
  // allow all other bits to remain on (i.e. turn off now defunct links)
  address.ProducerNew.LinkMask_V &= ~this.routerEmptyMask[address.ID];
  // reset
  this.routerEmptyMask[address.ID] = 0;
}
// PART 4 - swap
address.ProducerNew = Interlocked.Exchange(ref address.Producer, address.ProducerNew);
// PART 5 - lazily include the new links, make a working copy
workMask = address.Producer.LinkMask_V |= address.ProducerNew.WorkMask_V;

Обратите внимание на ленивое обновление.

26
задан Peter Cordes 9 August 2018 в 09:19
поделиться