簡體   English   中英

C++ 中 Java volatile 的作用是什么?

[英]What serves the same purpose of Java volatile in C++?

我在 Java 中學習了volatile關鍵字。當變量由一個特定線程寫入時,它用作確保其他線程可見性的一種手段。 它通過刪除某些變量的機器緩存並在某些情況下在每次寫入時禁用 CPU 指令重新排序來實現這一點。

我注意到volatile存在於 C++ 中,但它有不同的用途。 我想知道 C++ 如何實現緩存一致性以及 Java 中與volatile相關的其他內容。

現代主流 CPU 具有一致的緩存。 這由緩存一致性協議負責。 如果字段是 (Java) 易失性的,這是獨立的。 因此,普通加載/存儲也具有一致性。 盡管更高的鏈條連貫性可能會被破壞。

Java volatile 的 C++ 版本將是具有 memory_order_seq_cst(默認)的原子。

沒有替代品。

C++11 從 Java 派生出它的 memory model,但它明確承認一些 Java 的選擇被證明是次優的。 Java 的volatile語義就是其中之一,在每個 object 上同步的能力也是如此。

C++沒有實現緩存一致性。 這是編譯器和 CPU 的事情。 C++ 層,您有訂單操作。 A happens-before B。在某種意義上可以與volatile進行比較的一個這樣的情況是 C++ 原子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM