I have code like this:
static volatile int i = 0;
static void Foo() {
int myInt = i++;
// now use myInt
}
我需要让myInt
的每个值都是唯一且连续的。例如,如果有5个这样的线程正在运行,它们应该具有myInt
值0,1,2,3,4
(顺序不重要)。
所以,我想知道这种方法是否线程安全,并且如何最好地实现我所需的功能?
I have code like this:
static volatile int i = 0;
static void Foo() {
int myInt = i++;
// now use myInt
}
我需要让myInt
的每个值都是唯一且连续的。例如,如果有5个这样的线程正在运行,它们应该具有myInt
值0,1,2,3,4
(顺序不重要)。
所以,我想知道这种方法是否线程安全,并且如何最好地实现我所需的功能?
为了线程安全,请使用Interlocked.Increment():
将指定的变量增加并以原子操作的方式存储结果。
int MyInt = Interlocked.Increment(ref i);
[...而且没有理由将其标记为volatile,这种方法有点不稳定,并且在未来的C#版本中可能会被弃用或删除...]