Threadsafe方式具有唯一的连续值

apl*_*vin 3 c# multithreading thread-safety

我有这样的代码:

static volatile int i = 0;
static void Foo() {
int myInt = i++;
// now use myInt
}
Run Code Online (Sandbox Code Playgroud)

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

所以,我不知道这种方式是否是线程安全的,以及实现我需要的最佳方法是什么?

Mit*_*eat 6

对于线程安全使用Interlocked.Increment():

增加指定的变量并将结果存储为原子操作.

    int MyInt = Interlocked.Increment(ref i);
Run Code Online (Sandbox Code Playgroud)

[...并且没有理由将其标记为易失性,这在某种程度上已被破坏,可能会在未来版本的C#中被弃用/删除...]