【发布时间】:2023-02-01 20:42:46
【问题描述】:
我试图在线程同步中理解 C# 中的 Interlocked。
public int MethodUsedByMultipleThreads()
{
var id = CreateNextId();
return id;
}
private long CreateNextId()
{
long id = 0;
Interlocked.Exchange(ref id , this._nextId);
Interlocked.Increment(ref this._nextId);
return id;
}
是线
Interlocked.Exchange(ref id , this._nextId);
如果我直接使用是多余的
Interlocked.Increment(ref this._nextId);
return _nextId;
它会起到同样的作用吗?
【问题讨论】:
-
您的变量是方法的本地变量。未共享
-
@DanielA.White
this._nextId显然是? -
一般来说,你想使用一原子操作。看起来你应该只在共享变量上使用
Increment和使用该操作的返回值而不是再次回到变量。您正在破坏原子操作的意义。
标签: c# thread-synchronization interlocked