'的示例;挥发性';防止C#中的编译器优化?
据我所知,C#中的“volatile”修饰语有两种效果:'的示例;挥发性';防止C#中的编译器优化?,c#,.net,concurrency,synchronization,volatile,C#,.net,Concurrency,Synchronization,Volatile,据我所知,C#中的“volatile”修饰语有两种效果: 根据需要为目标处理器插入围栏 防止某些编译器优化 在x86/amd64上,(1)是不相关的。这些处理器不需要为易变语义设置围栏。(不过,ia64是不同的。) 因此,我们将讨论(2)。但是,对于我尝试过的示例,volatile对jit-ted程序集没有任何影响 我的问题是:你能举一个C代码示例吗?在一个字段上添加一个“volatile”修饰符会导致不同的jit ted汇编代码?也许就是你要找的。Marc Gravell对缺少volatile
值得一提的是(正如Marc所做的那样),编译器优化只有在以发布模式编译时才能看到。太棒了,这正是我想要的!这里,volatile确实会导致不同的汇编代码。如果有人好奇,没有volatile修饰符,字段值会缓存在寄存器中。而且,当该值位于寄存器中时,循环内核将永远不会“注意”另一个内核所做的更新。