簡體   English   中英

在C ++中是否存在Java'volatile'的等價物?

[英]Is there an equivalent of Java 'volatile' in C++?

在Java中,有時當從不同的線程訪問同一個變量時,每個線程都會創建自己的變量副本,所以如果我將一個線程中的變量值設置為10然后我試着讀取這個變量的值從另一個線程,我不會得到10 (因為第二個線程是從變量的另一個副本讀取!)。

要在Java中解決這個問題,我所要做的就是使用關鍵字volatile,例如:

volatile int i = 123;

這個問題在C ++中也存在嗎? 如果是這樣,我該如何解決?

注意:我使用的是Visual C ++ 2010。

是的,C ++中存在同樣的問題。 但是由於C已經引入了具有不同含義的關鍵字volatile (與線程無關),並且C ++以相同的方式使用了它們的關鍵字,所以你不能像在Java中那樣在C ++中使用volatile

相反,你可能最好使用std::atomic<T> (或boost::)。 它並不總是最有效的選擇,但它很簡單。 如果這原來是一個瓶頸,你可以放松std::memory_order所使用std::atomic

說到標准C ++,MSVC ++作為擴展確保多個線程可以訪問共享的volatile變量。 IIRC,所有線程最終都會看到相同的值,並且沒有線程會及時返回。 (也就是說,如果0和1按順序寫入變量,則沒有線程會看到序列1,0)

暫無
暫無

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

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