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