volatile和原子操作 的关系解决方法

volatile和原子操作 的关系



InterlockedExchangeAdd系列函数和直接用volatile来修饰变量 是等价的吗??

感觉是一样的, InterlockedExchangeAdd的参数类型是PLONG volatile , 普通的long 是可以转换为volatile的


不知道我这样理解,合适吗?


问题2:


线程异步,同步 用通俗的话来解释,怎么解释,太专业,书面,难以听懂啊

为什么说 异步是特殊的同步呢??



------解决方案--------------------
没有啥关系, volatile 只能防止编译器优化, 在一般的编译器上只能保证读或者写的原子性, 不能保证 读-写, 读-修改-写 操作的原子性.
------解决方案--------------------
windows编程的
1.volatile“易变的”,每次都从内存中读取,而不从寄存器中读取,保证你读取的是最新的值
VOLATILE防止编译器优化
2.原子操作是不被打断的操作
3.异步同步关系的理解
同步字面是步调一致,最好的理解是:按照一定的规则你发一个,我接一个
异步是我发了,可以再发,你接一次



------解决方案--------------------
这个不存在函数体的问题。。。
声明的时候“赋值”,其实是初始化,一般是一条push;而后面那个要是中间还有其他指令的话就变成了一系列的取址加上mov指令了。如果是c++对象的话,前一种直接调用带参数的构造函数执行初始化,后面那种则是先调用无参构造函数初始化,再调用=操作符(operator = () )效率当然低于直接初始化。
至于线程的问题,都是积累的知识,interlocked api的和同步对象函数的描述文档里都有的。。。

volatile的这里有
http://en.wikipedia.org/wiki/Volatile_variable
------解决方案--------------------
volatile:声明易变变量

volatile声明的变量除了能被程序改变外还可以被其他代理(例如硬件)改变。

C/C++ code
volatile int a;  
volatile const int b;//允许,const只表明不能由程序改变