Что (если есть) является эквивалентом С# команды ASM "XCHG" .
С этой командой, которая imo является подлинным обменом (в отличие от Interlocked.Exchange), я мог бы просто атомарно поменять два ints, чего я действительно пытаюсь сделать.
Update:
Пример кода, основанный на моем предложении. Переменная суффикс "_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<IPC.Producer>(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;
Обратите внимание на обновление lazy.