我记得在64位系统上(Int32和Int64)的操作在.Net中是真正原子性的(即汇编/应用程序被编译为64位)。
这是真的吗?
我找不到MSDN引用,所以想在这里问问大家。
我想知道是否要使用Interlocked类从多个线程检查和递减Int32的值,而且我正在将其编译为64位应用程序。
在MSDN文档中有一些这些方法的说明,但我不确定我是否理解正确。
谢谢。
我记得在64位系统上(Int32和Int64)的操作在.Net中是真正原子性的(即汇编/应用程序被编译为64位)。
这是真的吗?
我找不到MSDN引用,所以想在这里问问大家。
我想知道是否要使用Interlocked类从多个线程检查和递减Int32的值,而且我正在将其编译为64位应用程序。
在MSDN文档中有一些这些方法的说明,但我不确定我是否理解正确。
谢谢。
ldc_i4_1
/ldc_i8
),并使其变得更简单,但基本上:这不是单个原子操作。您不能在线程处理代码中执行线程安全的递增(不会有丢失更新的风险)而不使用某种锁定结构或使用Interlocked
。int
等类型的操作是原子性的;对long
等类型的操作不能保证是。是的,在x64上它们可能是原子的,但问题是:当担心原子性时,您必须处理线程。处理线程时,您不会关注实现,即发生的情况-因为那是不保证的,而你肯定关心代码是否完成了预期的工作。因此,在我看来,您只需要关注已保证的内容,这意味着:不能依赖于long
(等)的原子性。Interlocked.Increment
,Interlocked.Add
等。