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个这样的线程,它们应该具有myInt值0, 1, 2, 3, 4(顺序并不重要).
所以,我不知道这种方式是否是线程安全的,以及实现我需要的最佳方法是什么?
对于线程安全使用Interlocked.Increment():
增加指定的变量并将结果存储为原子操作.
int MyInt = Interlocked.Increment(ref i);
Run Code Online (Sandbox Code Playgroud)
[...并且没有理由将其标记为易失性,这在某种程度上已被破坏,可能会在未来版本的C#中被弃用/删除...]