C# 原子性 : assignment of int vs. long 在 x64 平台上

标签 c# .net multithreading pointers thread-safety

我正在查看 http://msdn.microsoft.com/en-us/library/aa691278(VS.71).aspx ,表示int的读写是原子的,而long的读写可能不是。 64 位平台真的如此吗?不是 IntPtr.Size == 64 位或长吗?我是不是遗漏了什么或者语言规范不够完整?

这里还有更多想法: http://philosopherdeveloper.wordpress.com/2011/02/08/beware-assignment-atomic-assignment/

最佳答案

long 是在具有 64 位字的 CPU 平台上的原子写入。例如如果您在 64 位计算机上运行 32 位 .NET 应用程序,写入 long不是是原子的。

请注意,如果您不能确保编译器不会优化对该类型变量的访问,那么原子性几乎毫无意义。例如你不能用 volatile 修饰一个 long 字段。

Operations on 64-bit fields are guaranteed to be atomic only in a 64-bit runtime environment

http://www.albahari.com/threading/part4.aspx

if you are running C# code on a 64 bit operating system in a 64 bit version of the CLR then reads and writes of 64 bit doubles and long integers are also guaranteed to be atomic

http://blogs.msdn.com/b/ericlippert/archive/2011/05/31/atomicity-volatility-and-immutability-are-different-part-two.aspx

关于C# 原子性 : assignment of int vs. long 在 x64 平台上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12486572/

相关文章:

c# - 从文本文件中删除除第一行以外的所有内容

C# 锁定和一般线程设计问题

java - 在这种多线程情况下,有哪些好的同步策略?

c# - 复选框的树形 View

.net - 为什么没有选择更好匹配的模板?

c# - OleDb Excel : No value given for one or more required parameters

c# - 如何在多线程中获取线程状态

c# - 使用 MVC 动态添加到页面

c# - .net 中 Sha256 的更新功能在哪里?

c# - ASP.Net 网站项目的程序集名称