簡體   English   中英

什么是volatile復制構造函數?

[英]What is volatile copy constructor for?

你能給出一個簡單或真實的例子來演示volatile復制構造函數的用法嗎?

我只是想不出一個。

正如@Nawaz已經指出:

當你有易失性對象時,你需要volatile copy-ctor。 所以問題歸結為:你什么時候需要易變的物體?

使用volatile關鍵字的主要原因通常是禁用優化。 那就是你有這樣的東西:

bool flag = false;
if(!flag) {}

編譯器將看到該標志無法更改,因此不需要每次都檢查標志 - 所以它不會。 但是,如果你使標志變量volatile - 它會。

以下是volatile關鍵字原始用法的意見: 鏈接

簡而言之,它最初用於通過MMIO訪問硬件,這可能有點不尋常:

unsigned char* pControl = 0xff24 ;
*pControl = 0 ;
*pControl = 0 ;
*pControl = 0 ;

並且由於優化,您不希望這3個分配成為一個。

這是Andrei Alexandrescu關於多線程軟件中的易失性的一篇論文: 鏈接

有一些文章批評亞歷山大夫斯庫的論文,但我找不到。 關鍵在於他拋棄了不穩定的財產等等。

請注意@JanHudec指出的多線程非常重要的事情:

volatile對於多線程上下文完全沒用,因為雖然它阻止了優化,但它不會產生明顯的障礙。 如果沒有那些在一個CPU上完成的寫操作可能不會被另一個CPU看到(取決於架構; x86具有連貫的高速緩存,因此寫入總是在那里可見)。

volatile也不會強制操作是原子的。 在x86上,賦值總是原子的,但並非所有CPU體系結構都是如此。 更復雜的操作(如增量)只能使用std::atomic

暫無
暫無

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

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