[英]java and C++11 volatile
我想將一些代碼從Java移植到C ++ 11,我對volatile關鍵字感到困惑。
我不熟悉Java語言,我不知道它是什么變量。 它保證每個線程都可以訪問變量的最新值 - 它是C ++的易失性行為。 但它通常用於同步 - 是對volatile變量原子執行的所有操作嗎?
所以我認為C ++ 11對Java volatile的良好替代將是std :: atomic。 或者我完全錯了,因為我錯過了一些額外的Java volatile功能?
是的,他們將是一個很好的匹配,在Dobbs博士有一篇很好的文章。
簡而言之,有序的原子變量可以安全地在多個線程上同時讀取和寫入,而無需進行任何顯式鎖定,因為它們提供了兩個保證:它們的讀取和寫入保證按它們在程序源代碼中出現的順序執行; 每次讀或寫都保證是原子的,全有或全無。
Java將此類變量提供為volatile
,C ++為std::atomic
。
這個頁面對Java的volatile
關鍵字有一個很好的解釋: http : //www.javamex.com/tutorials/synchronization_volatile.shtml 。 在我看來,原始類型(例如,整數)上的C ++ 11 std::atomic<>
確實是一個很好的替代品。 請注意, std::atomic<>
支持讀 - 修改 - 寫操作(例如, compare_exchange_strong
和fetch_add
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.