Java 8 Unsafe: xxxFence() instructions

15 浏览
0 Comments

Java 8 Unsafe: xxxFence() instructions

在Java 8中,将三条内存屏障指令添加到了Unsafe类中(来源):

/**
 * 确保在屏障之前的加载操作不会与屏障之后的加载或存储操作重排序。
 */
void loadFence();
/**
 * 确保在屏障之前的存储操作不会与屏障之后的加载或存储操作重排序。
 */
void storeFence();
/**
 * 确保在屏障之前的加载或存储操作不会与屏障之后的加载或存储操作重排序。
 */
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()

我猜想 - 它们并不是真正必要的,但我目前还不明白为什么。所以,我想知道为什么没有将它们添加进去的原因。对于这方面的猜测也欢迎(希望这不会导致问题因为基于意见而被视为离题)。

提前感谢。

0