Dans Java 8 trois barrière de mémoire des instructions ont été ajoutées Unsafe
classe (source):
/**
* 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();
Si nous définissons la barrière de mémoire avec la manière suivante (que je considère comme plus ou moins facile à comprendre):
Considérons X et Y les types d'opération/de classes qui font l'objet de la réorganisation,
X_YFence()
est une barrière de mémoire d'instructions qui assure que toutes les opérations de type X avant la barrière terminée avant toute opération de type Y après la barrière est commencé.
Nous pouvons aujourd'hui "carte" de la barrière des noms à partir d' Unsafe
de cette terminologie:
-
loadFence()
devientload_loadstoreFence()
; -
storeFence()
devientstore_loadStoreFence()
; -
fullFence()
devientloadstore_loadstoreFence()
;
Enfin, ma question est , pourquoi n'avons-nous pas load_storeFence()
, store_loadFence()
, store_storeFence()
et load_loadFence()
?
Ma conjecture serait - ils ne sont pas vraiment nécessaire, mais je ne comprends pas pourquoi à l'heure actuelle. Donc, j'aimerais savoir les raisons pour ne pas les ajouter. Devine sur qui sont aussi les bienvenus (espérons que ce n'est pas une cause de cette question hors de propos que par opinion, tout de même).
Merci à l'avance.