Re: [問題] volatile的正確用法

作者: Killercat (殺人貓™)   2014-09-13 20:53:23
我自己看過volatile會用在這幾個地方,可以參考一下
1. 大多數的Device都會在kernel space map一塊記憶體作為溝通之用
這塊100%是volatile,不然穩死
簡單說這塊記憶體內容根本不是自己控制的,所以每次查詢都需要去peek
2. 這情況雖然我不覺得需要volatile,但是很多人認為是需要的
就是threading的global部分(這是個多危險的東西啊 XD)
我總覺得這用法是從java來的,java會用volatile做某種程度的synchronized
我不知道C有沒有這種行為
3. shmat拿到的void*取值後最好要volatile,別鐵齒,雖然看起來是user space
作者: Feis (永遠睡不著 @@)   2014-09-13 21:25:00
threading 的部分, C 靠 volatile 做到 "一點點"C++ 有自己一套玩法
作者: firose (guest也是也是也是也是也)   2014-09-13 22:08:00
java volatile 可處理 reorder & coherence, C++ 沒有
作者: windows2k (程式宅 <囧>)   2014-09-13 23:16:00
VC2005的volatile有Java volatile的語意,不過也只有VC有這玩意,C11/C++11推的是atomic不過這邊跟猿啼有點偏了..:phttp://bit.ly/1pe0njw 有興趣的話參考看看
作者: carylorrk (carylorrk)   2014-09-14 02:41:00
基本上意識到內容不是自己的,就該考慮用 violatile不過這是最低限度,像是 threading 加不加無所謂是因爲很多時候都不夠用...不過基本上還是只有處理 hardware 的時候最常見pthread lock 或是 atomic 纔能保證單一變數的語意,同時也包含了 volatile 的語意。而 1 和 3 在 Linux 上某種程度上來說是差不多的東西 XD*保證單一變數的 sync 語義
作者: saladim (殺拉頂)   2014-09-14 10:28:00
到了multiCore整個狀況又變難了
作者: carylorrk (carylorrk)   2014-09-14 16:32:00
發現昨天睡前整個語無倫次...

Links booklink

Contact Us: admin [ a t ] ucptt.com