[英]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.