Здравствуйте, hi_octane, Вы писали:
_>Подозреваю что проблема в использовании CompareExchange не по назначению. В частности, возможно, играет роль очерёдность разыменования "ref T". Например если будет:
_>_>поток 1:
_> value = *ref T;//value == ref T == X
_>поток 2:
_> Write<T>(ref T, Y)//ref T == Y
_>поток 1:
_> comparand = *ref T;//comparand == Y
_> Interlocked.CEX(ref T, =X, =Y) //упс, непреднамеренно заменили результат Write на первое прочитанное значение
_>
Я тоже так считаю, вот коллега по цеху не был со мной согласен.
Есть идея как написать минимальный код приводящий к проблеме, чтобы его убедить ?