История изменений
Исправление QsUPt7S, (текущая версия) :
А при plain доступе есть гарантия, что значение не останется в регистре? Инлайнинг порой творит чудеса, а у меня весь код целиком инлайнится в пару функций
Если к переменной можно обратиться из нескольких потоков, то в принципе без разницы, будет ли она заинлайнена в регистр, либо будет хранится реально где-то в памяти. Модель памяти языка, может не давать чётких гарантий по реализации, но обычно определяет правила видимости значений при многопоточном доступе.
Конечно хотелось бы найти гарантированный способ, который поможет избежать тяжёлых load барьеров при чтении
В Java, в описанном кейсе, так точно можно, так как моделью памяти актуальных версий Java гарантируется, что обращение к методу запуска потока happens-before любых действий этого потока. Я не настолько хорошо знаком с моделью памяти C/C++, но и там, насколько я знаю, конструктор потока даёт аналогичные гарантии.
Исходная версия QsUPt7S, :
А при plain доступе есть гарантия, что значение не останется в регистре? Инлайнинг порой творит чудеса, а у меня весь код целиком инлайнится в пару функций
Если к переменной можно обратиться из нескольких потоков, то в принципе без разницы, будет ли она заинлайнена в регистр, либо будет хранится реально где-то в памяти. Модель памяти языка, может не давать чётких гарантий по реализации, но обычно определяет правила видимости значений при многопоточном доступе.
Конечно хотелось бы найти гарантированный способ, который поможет избежать тяжёлых load барьеров при чтении
В Java, в описанном кейсе, так точно можно, так как моделью памяти актуальных версий Java гарантируется, что обращение к методу запуска потока happens-before любых действий этого потока. Я не настолько хорошо знаком с моделью памяти C/C++, но и там, насколько я знаю, конструктор потока даёт аналогичные гарантии.