-
- Имана :) Поэтому и возник этот мой вопрос: а когда всё-таки fence operations использовать действительно приходится. Нет, ну правда, когда? - Николай Коровин(23.05.2018 11:15)
- При обращениям к некоторым регистрам периферии, при взаимодействии потоков без средств синхронизации ОС, в некоторых случаях тестирования аппаратного обеспечения. В общем узкий набор специальных случаев. - =AlexD=(23.05.2018 13:29)
- Ну вот в моём примере вопиющий случай синхронизации двух тредов без средств ОС, by atomic operation only. И быстрые приложения так пишутся уже лет эдак много. И писались задолго до OOE, и продолжают работать с ним. - Николай Коровин(23.05.2018 19:22)
- Ну вроде как если речь про глобальную переменную, то компиляторы оптимизируют доступ к ним с некоторой долей осторожности. А вот если локальная - то да, держите семеро, уж лучше рассталять барьеры памяти (хотя некоторые языки говорят, будто char* lloyd(26 знак., 23.05.2018 19:26)
- Неееее, я именно про барьерные инструкции проца в их аппаратном смысле. С компилятором действительно договориться проще, volatile, char*... Проблема именно в том, что инфа о том, когда сам камень может переставить команды -- весьма противоречива. - Николай Коровин(23.05.2018 19:34)
- Уже миллион раз обсуждали, не хочется повторяться. volatile и memory barrier -- оба нужны, у них разный ортогональный смысл. Компилятор имеет право всё переупорядочить, в память не писать, а кешировать в регистрах, и вообще вытворять всё что fk0(1761 знак., 24.05.2018 00:35)
- Про компилёр я и не спрашивал, это просто по привычке с темы съехали (именно что миллион раз). Я про mfence, lfence и sfence. Ну, и про префикс lock. Инструкции, да. Николай Коровин(708 знак., 26.05.2018 00:25)
- Короче, яйцеголовые запутались в показаниях. Что-то в Датском королевстве прогнило. Всё не так и всё не то. Где гений, когда он так нужен? - SciFi(24.05.2018 00:40)
- Тут как раз все просто - если переменная не volatile, нет барьеров памяти и прочего - то перестановка (и даже само выполнение) операций - лишь вопрос времени. lloyd(473 знак., 23.05.2018 19:45)
- Уже миллион раз обсуждали, не хочется повторяться. volatile и memory barrier -- оба нужны, у них разный ортогональный смысл. Компилятор имеет право всё переупорядочить, в память не писать, а кешировать в регистрах, и вообще вытворять всё что fk0(1761 знак., 24.05.2018 00:35)
- Неееее, я именно про барьерные инструкции проца в их аппаратном смысле. С компилятором действительно договориться проще, volatile, char*... Проблема именно в том, что инфа о том, когда сам камень может переставить команды -- весьма противоречива. - Николай Коровин(23.05.2018 19:34)
- Ну вроде как если речь про глобальную переменную, то компиляторы оптимизируют доступ к ним с некоторой долей осторожности. А вот если локальная - то да, держите семеро, уж лучше рассталять барьеры памяти (хотя некоторые языки говорят, будто char* lloyd(26 знак., 23.05.2018 19:26)
- Ну вот в моём примере вопиющий случай синхронизации двух тредов без средств ОС, by atomic operation only. И быстрые приложения так пишутся уже лет эдак много. И писались задолго до OOE, и продолжают работать с ним. - Николай Коровин(23.05.2018 19:22)
- При обращениям к некоторым регистрам периферии, при взаимодействии потоков без средств синхронизации ОС, в некоторых случаях тестирования аппаратного обеспечения. В общем узкий набор специальных случаев. - =AlexD=(23.05.2018 13:29)
- Имана :) Поэтому и возник этот мой вопрос: а когда всё-таки fence operations использовать действительно приходится. Нет, ну правда, когда? - Николай Коровин(23.05.2018 11:15)