Сообщение Re[4]: Доступ к локальной переменной из разных потоков от 13.11.2020 7:56
Изменено 17.11.2020 14:43 VladD2
Re[4]: Доступ к локальной переменной из разных потоков
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, Shmj, Вы писали:
S>>Добавил пример — продемонстрируйте проблему.
Pzz>Вплоть до переупорядочивания чтений/записей процессором (не компилятором, а именно процессором).
Pzz>В твоем простом примере, конечно, такое вряд ли поймаешь — пока Sleep() отработает, все 100500 раз устаканится. Но в реальной жизни они будут, причем проявляться будут весьма неочевидным и невоспроизводимым образом.
На прошлой неделе аккурат это самое огрёб, из-за материализации linq-последовательности другим потоком, нежели тот который порождает
Упрощённо как-то так:
Когда оно так в три строчки нарисовано — всё сразу понятно, но в реальном коде это было куда более многословно. Когда увидел причину — поржал над собой
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-последовательности другим потоком, нежели тот который порождает
Упрощённо как-то так:
Когда оно так в три строчки нарисовано — всё сразу понятно, но в реальном коде это было куда более многословно. Когда увидел причину — поржал над собой
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) {...});
Когда оно так в три строчки нарисовано — всё сразу понятно, но в реальном коде это было куда более многословно. Когда увидел причину — поржал над собой