什么已经在内存模型改变了.NET 4.5?(What has changed in the memo

2019-08-17 00:38发布

我刚才读彼得Richtie博客这个令人费解的线,我需要帮助来理解其中的含义Prior to .NET 4.5 you really programmed to the .NET memory model : http://msmvps.com/blogs/peterritchie/archive/2012/09 /09/thread-synchronization-of-atomic-invariants-in-net-4-5.aspx

具有“通常” .NET存储器模型 (例如通过C#版1和2(我还没有读入的3D) 在杰弗里里希特书CLR讨论的 )来改变在.NET 4.5?

有没有有意识的解释的文章?

Answer 1:

处理并发在.NET的正确方式是基于弱内存模型。 这不是在.NET 4.5改变。

正因为安腾不再受支持,并不意味着你可以假设强x86或AMD64内存模式。 举例来说,你有其他弱内存模型平台,如ARM。

一定要记住,非易失性读取到相同的变量或字段可以由JIT编译器的第一个之后被省略,在情况下,可以证明有读取存储器屏障之间(没有同步,监控的对象是锁定/是监视器一个可变的解锁,易失性读那是易失性写入, Interlocked上的可变操作)。 这种尊重的观点一致线程的点。

其中,微软.NET框架的JIT编译器elides您链接到显示的例子文章内容中如while读取非易失性变量没有在循环中的任何同步点循环。 但要记住,JIT编译器可以使用整个程序的优化来概括调用者和被调用者之间的省音。

作为.NET这样,无锁算法,读一个变量或字段没有记忆障碍,锁,可变语义或Interlocked操作,其前提是这些读取最终将看到其它线程的变化,与JIT编译器赌博。 从本质上说,这些算法是错误的在便携性方面。

这使我想知道,你为什么问这个?



文章来源: What has changed in the memory model in .NET 4.5?