我一直在努力了解什么VarHandle::setOpaque,真正VarHandle::getOpaque在做什么。到目前为止,这并不容易——我想我得到了一些东西(但不会在问题本身中提出它们,不要混淆水域),但总的来说,这对我来说充其量是错误的。
文档:
返回变量的值,按程序顺序访问...
那么在我的理解中,如果我有:
int xx = x; // read x
int yy = y; // read y
这些读数可以重新排序。另一方面,如果我有:
// simplified code, does not compile, but reads happen on the same "this" for example
int xx = VarHandle_X.getOpaque(x);
int yy = VarHandle_Y.getOpaque(y);
这次不能重新订货了?这就是“程序顺序”的意思?我们是在谈论在这里插入障碍以禁止这种重新排序吗?如果是这样,因为这是两个负载,是否可以实现相同的目标?通过:
int xx = x;
VarHandle.loadLoadFence()
int yy = y;
但它变得更加棘手:
...但不能保证相对于其他线程的内存排序效果。
我无法举出一个例子来假装我理解这部分。
在我看来,这份文档是针对那些确切地知道他们在做什么的人(我绝对不是)......那么有人可以在这里阐明一下吗?
一只名叫tom的猫
人到中年有点甜
白衣染霜花
相关分类