В Java 8 в класс Unsafe добавлены три инструкции по защите памяти (источник):
/**
* Ensures lack of reordering of loads before the fence
* with loads or stores after the fence.
*/
void loadFence();
/**
* Ensures lack of reordering of stores before the fence
* with loads or stores after the fence.
*/
void storeFence();
/**
* Ensures lack of reordering of loads or stores before the fence
* with loads or stores after the fence.
*/
void fullFence();
Если мы определяем барьер памяти следующим образом (который я считаю более или менее понятным):
Рассмотрим X и Y как типы/классы операций, подлежащие переупорядочению,
X_YFence()является инструкцией барьера памяти, которая гарантирует, что все операции типа X перед барьером завершены до любой операции типа Y после запуска барьера.
Теперь мы можем "сопоставить" имена барьеров от Unsafe к этой терминологии:
-
loadFence()становитсяload_loadstoreFence(); -
storeFence()становитсяstore_loadStoreFence(); -
fullFence()становитсяloadstore_loadstoreFence();
Наконец, мой вопрос - почему мы не имеем load_storeFence(), store_loadFence(), store_storeFence() и load_loadFence()?
Мое предположение было бы - они действительно не нужны, но я не понимаю, почему на данный момент. Поэтому я хотел бы знать причины, по которым они не добавляются. Угадайся об этом тоже приветствуем (надеюсь, что это не приведет к тому, что этот вопрос будет оффтопическим, как основанный на мнениях).
Спасибо заранее.