Краткий ответ: нет.
Однако я не знаю ни одной ситуации, в которой консервативный подход компилятора изменит количество операций чтения или записи, если вы будете следовать этому подходу:
При чтении видимого местоположения с несколькими потоками сохраните его значение в локальном, прежде чем выполнять дальнейшие манипуляции; аналогично, ограничьте записи одним назначением.
Компилятор Delphi не выполняет общее исключение подвыражений (CSE) для нелокальных выражений местоположения, когда между выражениями есть вызовы не встроенных методов, так как компилятор не выполняет межпроцедурную оптимизацию и, следовательно, он не будет корректным даже для однопоточного кода.
Итак, вы можете использовать InterlockedExchange () для чтения и записи, чтобы форсировать это; кроме того, это вызовет полный барьер памяти, поэтому процессор также не будет переупорядочивать операции чтения и записи.