Строго говоря - предпочтительно без учета какого-либо конкретного типа процессора - myThread () гарантированно печатает 1?
Теоретически, он может печатать либо 0
, либо 1
, даже на x86, поскольку хранилища могут перемещаться после загрузок практически на любой архитектуре .
На практике было бы трудно сделать myThread()
print 0
.
Порождение потока, скорее всего, будет функционировать как неявное хранилище / освобождение барьер памяти , поскольку, вероятно, оно будет:
- иметь хотя бы одну инструкцию вдоль пути выполнения, которая приводит к барьеру памяти - заблокированные инструкции, явные инструкции барьера памяти и т. д.,
- или хранилище будет просто удалено / выгружено из буфера store к моменту вызова myThread()
, поскольку установка нового потока приводит к выполнению многих инструкций - среди них много хранилищ.