簡體   English   中英

java和C ++ 11易失

[英]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_strongfetch_add )。

暫無
暫無

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

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