3

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

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

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

4

2 回答 2

9

不; 这显然不是原子的。
x++编译成三个独立的指令(加载、递增、存储),可以被其他线程中断。

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

于 2012-12-04T04:10:25.240 回答
0

如果并发线程使用此方法,那么您必须处理通过放置锁来实现的并发性。

于 2012-12-04T04:12:00.327 回答