我有一个“唯一”类型的整数。我这样用它:
int unique=0;
public int GetUniqueId()
{
return unique++;
}
我知道我有点偏执,但这是一个原子操作,还是需要某种形式的锁?此函数将用于极其并发的类中。
答案 0 :(得分:9)
没有;这显然是不原子
x++
编译为三个单独的指令(加载,增量,存储),可以被其他线程中断。
如果这将在多个线程上运行,则应该调用Interlocked.Increment(ref unique)
(这是原子的)
这个调用比常规增量慢一些,比完全锁定快得多。
答案 1 :(得分:0)
如果并发线程使用此方法,则必须处理通过锁定实现的并发性。