Есть True и False sharing которые позволяет процессорам обмениваться кеш-линиями. Как при этом может существовать проблема visibility?
Однако без volatile утечки на лицо даже в самых простых примерах с счетчиками.
int temp = 0;
synchronize(this) {
temp++;
}
Если sharing позволяет ядрам видеть кеши друг друга то в чем тогда проблема которую решает volatile?
Или можно еще перефразировать так: чего не хватает sharing механизмам что-бы в состоянии контролируемой гонки предотвратить утечку данных?
Возможно что sharing то работает но он работает только для тех процессоров которые уже имеют данную переменную в кэше а потоки-новобранцы могут прочитать данные из памяти которые уже не актуальны так как те потоки что уже давно работают с этой переменной успели изменить ее значение после последней выгрузки в память?
То есть в промежутке между первым считыванием из памяти переменной и и первого ее изменения шаринг не срабатывает?(как гипотиза).
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости