MrDywar Pichugin: Я просто к тому, что перед вызовом CompareExchange() (call 6A5C7038) стек уже имеет указатель на область памяти массива. Соответственно во время вызова CompareExchange() как раз и должна единоразово выполниться инструкция "lock cmpxchg": считать переменную по указателю, сравнить и заменить - все это как атомарная операция.
MrDywar Pichugin: Получил вот такой результат дизассемблирования. Не силён в ассемблере. Вроде, там перед вызовом метода пушится в стек указатель на адрес памяти указывающий на ячейку массива. Т.е., вроде бы, CompareExchange() должна атомарно этот адрес сравнить и, в случае успеха сравнения, поменять на новый.
Спасибо за развернутый ответ. По большей части про это всё в курсе. Насчет, WinDbg мне не очень понятно как посмотреть инструкцию процессора, если IL-код компилируется в машинный во время выполнения. Или там есть такая возможность?
Интересный вариант! Смущает только, что компоновщик больше про иерархию и отношения родитель-ребенок. А тут получается, что структура не древовидная, а всегда плоская.