我正在阅读Hans的一篇文章,他认为在lazySet或最终变量写入之前还需要LoadStore。
他表现出我无法理解的特殊种族状况。
http://www.hboehm.info/c++mm/no_write_fences.html请参见收件人写入对象。
x.a = 43的线程1存储如何可以通过StoreStore屏障完成,这非常违反直觉,因为这样就完全违反了StoreStore屏障的目的。
此处类似的参数http://shipilev.net/blog/2014/all-fields-are-final/
在此处复制Shiplev:
“JSR 133 Cookbook仅需要StoreStore,但可能还需要LoadStore障碍。这涵盖了当最终字段从其他需要初始化的其他字段初始化时遇到的极端情况。通过运行时优化可以启用这种极端情况,如图不需要最终的商店,将值放在局部变量中,这样就打破了单独对StoreStore的订购保证。”
*运行时如何确定最终的Store不需要,如果传递负载/重新排序StoreStore障碍,然后使用storeStore障碍也传递到本地变量/重新排序,这是我不太了解的部分,为什么存储到本地变量可以使用StoreStore Barrier重新排序。运行时如何/何时可以确定存储到局部变量就足够了*
如果任何人都可以通过一些简单的例子更详细地解释他们俩都提到的比赛条件,那将是非常有帮助的。
最佳答案
我的帖子中的报价令人困惑且过时,我很久以前已将其修复。对困惑感到抱歉。欢迎您在下次发生时给我发送邮件。实际上,它遵循Hans Boehm's example,这非常简单: