Не понятно, о чем вы спрашиваете, но InterlockedExchange
атомарно делает следующее:
- читает ранее существующее значение переменной
- записывает переменную
Обратите внимание, что в операции участвует только одна переменная, а также два временных значения (записываемое значение и возвращаемое предыдущее значение). Тогда как «своп» обычно означает запись двух переменных, каждая из которых имеет значение, которое ранее существовало в другой. Это было бы:
byte[] src;
byte[] dest;
lock(synchLock)
{
var temp = dest;
dest = src;
src = temp;
}
InterlockedExchange
нельзя использовать для реализации без блокировки блокировки с атомарным эффектом для обеих переменных.