我应该使用静态字段并互锁在一起吗?
Posted
技术标签:
【中文标题】我应该使用静态字段并互锁在一起吗?【英文标题】:Should I use static fields and interlocked together? 【发布时间】:2012-10-20 12:53:44 【问题描述】:我是否应该使用静态字段并互锁在一起,以防我需要使用静态字段提供线程安全和原子操作,静态字段默认是原子的吗?例如:
Interlocked.Increment(ref Factory.DefectivePartsCount);
谢谢。
【问题讨论】:
【参考方案1】:是的。
字段(假设为 Int32)是原子的,不是因为它是静态的,而是因为它是 32 位。
然而,Factory.DefectivePartsCount += 1
需要对变量执行读取和写入操作,因此整个操作不是线程安全的。
【讨论】:
什么是 32 位(32 位操作系统 - windows?)。如果我将使用 64 位系统,操作将是完全原子的吗? 是的,当您以 64 位为目标时,Int64 也将是原子的。但为什么要依赖它呢?请注意,只有 单个 操作是原子的。【参考方案2】:static
不保证任何线程安全。因此,即使变量是static
,增量仍然不是原子的。因此,您仍然需要根据情况使用经典的同步机制。在你的情况下Interlocked.Increment
很好。
【讨论】:
以上是关于我应该使用静态字段并互锁在一起吗?的主要内容,如果未能解决你的问题,请参考以下文章