线程安全的方式实现唯一连续值

3

I have code like this:

static volatile int i = 0;
static void Foo() {
int myInt = i++;
// now use myInt
}

我需要让myInt的每个值都是唯一且连续的。例如,如果有5个这样的线程正在运行,它们应该具有myInt0,1,2,3,4(顺序不重要)。

所以,我想知道这种方法是否线程安全,并且如何最好地实现我所需的功能?

1个回答

6

为了线程安全,请使用Interlocked.Increment()

将指定的变量增加并以原子操作的方式存储结果。

    int MyInt = Interlocked.Increment(ref i);

[...而且没有理由将其标记为volatile,这种方法有点不稳定,并且在未来的C#版本中可能会被弃用或删除...]


1
@chersanya 请查看Eric Lippert最近的博客文章http://blogs.msdn.com/b/ericlippert/archive/2011/06/16/atomicity-volatility-and-immutability-are-different-part-three.aspx - Winston Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接