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

看板C_and_CPP作者 (殺人貓™)時間9年前 (2014/09/13 20:53), 9年前編輯推噓0(0017)
留言17則, 5人參與, 最新討論串3/6 (看更多)
我自己看過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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.160.23.216 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1410612806.A.BE1.html ※ 編輯: Killercat (118.160.23.216), 09/13/2014 21:07:53

09/13 21:25, , 1F
threading 的部分, C 靠 volatile 做到 "一點點"
09/13 21:25, 1F

09/13 21:25, , 2F
C++ 有自己一套玩法
09/13 21:25, 2F

09/13 22:08, , 3F
java volatile 可處理 reorder & coherence, C++ 沒有
09/13 22:08, 3F

09/13 23:16, , 4F
VC2005的volatile有Java volatile的語意,不過也只有VC
09/13 23:16, 4F

09/13 23:17, , 5F
有這玩意,C11/C++11推的是atomic
09/13 23:17, 5F

09/13 23:17, , 6F
不過這邊跟猿啼有點偏了..:p
09/13 23:17, 6F

09/13 23:22, , 7F
http://bit.ly/1pe0njw 有興趣的話參考看看
09/13 23:22, 7F

09/14 02:41, , 8F
基本上意識到內容不是自己的,就該考慮用 violatile
09/14 02:41, 8F

09/14 02:42, , 9F
不過這是最低限度,像是 threading 加不加無所謂是因爲
09/14 02:42, 9F

09/14 02:43, , 10F
很多時候都不夠用...
09/14 02:43, 10F

09/14 02:48, , 11F
不過基本上還是只有處理 hardware 的時候最常見
09/14 02:48, 11F

09/14 03:25, , 12F
pthread lock 或是 atomic 纔能保證單一變數的語意,同
09/14 03:25, 12F

09/14 03:27, , 13F
時也包含了 volatile 的語意。而 1 和 3 在 Linux 上某
09/14 03:27, 13F

09/14 03:28, , 14F
種程度上來說是差不多的東西 XD
09/14 03:28, 14F

09/14 03:28, , 15F
*保證單一變數的 sync 語義
09/14 03:28, 15F

09/14 10:28, , 16F
到了multiCore整個狀況又變難了
09/14 10:28, 16F

09/14 16:32, , 17F
發現昨天睡前整個語無倫次...
09/14 16:32, 17F
文章代碼(AID): #1K53v6lX (C_and_CPP)
文章代碼(AID): #1K53v6lX (C_and_CPP)