noc*_*ura 9 .net c# multithreading volatile
我有一个旋转的线程,直到另一个线程更改的int是某个值.
int cur = this.m_cur;
while (cur > this.Max)
{
// spin until cur is <= max
cur = this.m_cur;
}
Run Code Online (Sandbox Code Playgroud)
this.m_cur是否需要声明为volatile才能生效?由于编译器优化,它是否有可能永远旋转?
Han*_*ant 12
是的,这是一个很难的要求.允许即时编译器将m_cur的值存储在处理器寄存器中,而无需从内存中刷新它.实际上x86抖动确实存在,x64抖动没有(至少我最后一次看它).
需要使用volatile关键字来抑制此优化.
易失性意味着Itanium内核,一个内存模式较弱的处理器完全不同.不幸的是,它成为了MSDN库和C#语言规范的原因.它在ARM核心上意味着什么还有待观察.
| 归档时间: |
|
| 查看次数: |
385 次 |
| 最近记录: |