我正在查看有關 java 柵欄的這篇很棒的帖子,其中柵欄用于以下示例,以確保并發執行緒始終可以讀取從其他執行緒更新的最新值:
// CPU 0:
void shutDownWithFailure(void)
{
failure = 1; // must use SOB as this is owned by CPU 1
SFENCE // next instruction will execute after all SOBs are processed
shutdown = 1; // can execute immediately as it is owned be CPU 0
}
// CPU1:
void workLoop(void)
{
while (shutdown == 0) { ... }
LFENCE // next instruction will execute after all LOBs are processed
if (failure) { ...}
}
我的問題是,使用柵欄對抗volatile.
以上面的例子,如果我同時做failure和shutdown volatile,它應該達到同樣的效果嗎?
uj5u.com熱心網友回復:
我想說,這一切都在與該問題相關的JEP 171中進行了描述,位于頂部的“動機”部分。總而言之:它旨在提供一種記錄方式來訪問這些機制,并為并發訪問提供類的進一步實作和擴展。
并不意味著使用它們總是比volatile.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/451295.html
上一篇:C中的PThreads,如何生成執行緒ID,為什么它們交替
下一篇:多實體任務執行
