我读过很多关于 C# 的 x86-x64、ARM、ECMA 内存模型之间的差异的文章。现实世界的最佳实践是什么:根据更强的 x86-x64 模型进行开发还是根据更弱的 ECMA 进行开发?我是否应该考虑仅在 x86-x64 硬件上运行的应用程序可能的重新排序、陈旧值、安全发布?
最佳答案
I've read a lot about differences between x86-x64, ARM, ECMA memory models for C#. What is the real world's best practice: developing according with stronger x86-x64 model or with weaker ECMA? Should I consider possible reordering, stale values, safe publishing for applications run only on x86-x64 hardware?
最佳实践是编写正确的代码。。
我选择通过不编写多线程共享内存代码来编写正确的代码。我也鼓励您这样做。
如果您必须编写多线程共享内存代码,那么我建议您使用高级库,例如任务并行库,而不是试图理解内存模型的复杂性。
如果您想编写仅在强内存模型上正确的低级共享内存多线程代码,那么我无法阻止您,但这似乎需要大量工作才能创建一个当您尝试在 ARM 上运行该程序时,该程序会出现细微的错误。
关于C#:x86-x64 内存模型与 ECMA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21321251/