在这种情况下是否需要锁定整数?

时间:2012-12-04 04:08:53

标签: c# .net multithreading concurrency locking

我有一个“唯一”类型的整数。我这样用它:

int unique=0;
public int GetUniqueId()
{
  return unique++;
}

我知道我有点偏执,但这是一个原子操作,还是需要某种形式的锁?此函数将用于极其并发的类中。

2 个答案:

答案 0 :(得分:9)

没有;这显然是原子 x++编译为三个单独的指令(加载,增量,存储),可以被其他线程中断。

如果这将在多个线程上运行,则应该调用Interlocked.Increment(ref unique)(这是原子的) 这个调用比常规增量慢一些,比完全锁定快得多。

答案 1 :(得分:0)

如果并发线程使用此方法,则必须处理通过锁定实现的并发性。