Зачем volatile если есть True/False sharing?

325
17 июля 2017, 14:35

Есть True и False sharing которые позволяет процессорам обмениваться кеш-линиями. Как при этом может существовать проблема visibility?

Однако без volatile утечки на лицо даже в самых простых примерах с счетчиками.

int temp = 0;
synchronize(this) {
  temp++;
}

Если sharing позволяет ядрам видеть кеши друг друга то в чем тогда проблема которую решает volatile?

Или можно еще перефразировать так: чего не хватает sharing механизмам что-бы в состоянии контролируемой гонки предотвратить утечку данных?

Возможно что sharing то работает но он работает только для тех процессоров которые уже имеют данную переменную в кэше а потоки-новобранцы могут прочитать данные из памяти которые уже не актуальны так как те потоки что уже давно работают с этой переменной успели изменить ее значение после последней выгрузки в память?

То есть в промежутке между первым считыванием из памяти переменной и и первого ее изменения шаринг не срабатывает?(как гипотиза).

READ ALSO
Запуск нового фрагмента из фрагмента с указанием позиции клика

Запуск нового фрагмента из фрагмента с указанием позиции клика

Доброго времени суток! У меня есть статический ArrayList предметов, которые отображаются в SubjectListFragment в котором есть RecyclerViewНужно чтобы по нажатию...

337
Приводит ли перекрестный вызов doGet() и doPost к deadlock?

Приводит ли перекрестный вызов doGet() и doPost к deadlock?

Во многих ресурсах можно найти вопрос для интервью о том как вызвать deadlock в сервлете, и везде говориться о том что нужно вызвать в теле doPost()...

285
Что плохого в моем коде тестового задания на java?

Что плохого в моем коде тестового задания на java?

Задача тестового: привести примеры использования ООП Что подтянуть? Критикуйте пожоще

285