Вы ищете атомарную, заблокированную версию swap
.
Насколько мне известно, нет способа сделать это, используя только примитивы Windows API и без явной блокировки.Различные Interlocked
функции, рекомендуемые другими, не будут работать, потому что изменяется только один из переданных параметров.Вы хотите изменить их оба.
Я мог бы также отметить, что функции Interlocked
связаны только друг с другом.Если у вас есть другой фрагмент кода, который обновляет один из этих указателей, но не использует Interlocked
, ваш код больше не является безопасным.Я уверен, что вы понимаете это, но подумал, что я упомяну это.
Насколько я знаю, вам нужно будет использовать библиотеку или написать свой собственный код для обработки этого.