В 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()
?
Мое предположение было бы - они действительно не нужны, но я не понимаю, почему на данный момент. Поэтому я хотел бы знать причины, по которым они не добавляются. Угадайся об этом тоже приветствуем (надеюсь, что это не приведет к тому, что этот вопрос будет оффтопическим, как основанный на мнениях).
Спасибо заранее.