Информация об изменениях

Сообщение Re[4]: Доступ к локальной переменной из разных потоков от 13.11.2020 7:56

Изменено 17.11.2020 14:43 VladD2

Re[4]: Доступ к локальной переменной из разных потоков
Здравствуйте, Pzz, Вы писали:

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


S>>Добавил пример — продемонстрируйте проблему.


Pzz>Вплоть до переупорядочивания чтений/записей процессором (не компилятором, а именно процессором).


Pzz>В твоем простом примере, конечно, такое вряд ли поймаешь — пока Sleep() отработает, все 100500 раз устаканится. Но в реальной жизни они будут, причем проявляться будут весьма неочевидным и невоспроизводимым образом.


На прошлой неделе аккурат это самое огрёб, из-за материализации linq-последовательности другим потоком, нежели тот который порождает

Упрощённо как-то так:
var b = init-bool-here();
var ohShit = data.Select(d => create-something-from-bool-val(b));
b = next-bool-logic();

Task.Run(() => foreach(var sh in ohShit) {...});


Когда оно так в три строчки нарисовано — всё сразу понятно, но в реальном коде это было куда более многословно. Когда увидел причину — поржал над собой
Re[4]: Доступ к локальной переменной из разных потоков
Здравствуйте, Pzz, Вы писали:

Pzz>В твоем простом примере, конечно, такое вряд ли поймаешь — пока Sleep() отработает, все 100500 раз устаканится. Но в реальной жизни они будут, причем проявляться будут весьма неочевидным и невоспроизводимым образом.


На прошлой неделе аккурат это самое огрёб, из-за материализации linq-последовательности другим потоком, нежели тот который порождает

Упрощённо как-то так:
var b = init-bool-here();
var ohShit = data.Select(d => create-something-from-bool-val(b));
b = next-bool-logic();

Task.Run(() => foreach(var sh in ohShit) {...});


Когда оно так в три строчки нарисовано — всё сразу понятно, но в реальном коде это было куда более многословно. Когда увидел причину — поржал над собой