Re[9]: Многопоточность
От: vlp  
Дата: 22.12.20 20:01
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Здравствуйте, vlp, Вы писали:


Ф>>>Примеры дизассемблера тебе ничего не дадут: сегодня это один пример, а завтра версия джиттера поменяется.

vlp>>Я просил пример того, как прямо сейчас, с текущей версией компилятора и джиттера, возможна ситуация, которой тут всех пугают и как volatile в ней помогает.
vlp>>Тут, судя по ответам, в треде одни философы-теоретики, примеров нет.

Ф>Зачем тебе реальный пример? Т

ну как зачем — чтобы спровоцировать кого-то подумать

>Тебя теоритическая возможность засесть на пару недель дебага не достаточно?

неа

Ф>Даже на практике в диассемлерных листнингах встречается вот такое:

Ф>
Ф>00007ff9`615508fb 488b4808        mov     rcx,qword ptr [rax+8]
Ф>00007ff9`615508ff 83790c02        cmp     dword ptr [rcx+0Ch],2
Ф>


Ф>Т.е. в этом случае действуют через промежуточный регистр.

в этом случае сначала из памяти читается адрес, а потом опять из памяти сравнивается значние по другому адресу. Это чтение поля класса, когда где-то есть указатель на инстанс (он грузится в ecx, а сам лежит в [rax+8]). Какое отношение это имеет к поведению volatile?

> Почему ты думаешь, что в случае ThrowIfDisposed() не может произойти тоже самое?

произойти что именно? Покажите пример того, что именно произойдет и от чего вас убережет volatile.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.