kit*_*une 10 c# java multithreading volatile
任何人都可以向我解释这两种不同方法的优点和缺点是什么?
当Java double或longJava中volatile,Java语言规范的第17.7节要求它们以原子方式读写.当它们不易变时,它们可以用多个操作编写.例如,这可能导致包含新值的long的高32位,而低32位仍然包含旧值.
原子读写更容易让程序员推理和编写正确的代码.但是,在某些环境中,对原子操作的支持可能会给VM实施者带来负担.
我不知道为什么volatile不能在C#中应用于64位整数,但你可以使用Thread.VolatileWrite在C#中做你想做的事情.volatile关键字只是这次调用的语法糖.
摘抄:
注意:在C#中,在字段上使用volatile修饰符可确保对该字段的所有访问都使用Thread.VolatileRead或Thread.VolatileWrite.
语法糖(关键字)适用于32位整数,但您可以使用64位整数的实际方法调用.
我想这归结为内存模型可以保证的.我不太了解CLI内存模型(C#必须使用),但我知道它将保证32位......但不是64位(虽然它可以保证x64上的64位引用 - 完整规则在ECMA 334v4的第17.4.3节中.所以它不可能volatile.你仍然有Interlocked方法,但(如long Interlocked.Exchange(ref long,long)和long Interlocked.Increment(ref long)等).
| 归档时间: |
|
| 查看次数: |
966 次 |
| 最近记录: |