我希望以原子方式递增静态变量,并同时以无锁方式将新值分配给实例字段。目的是使每个对象在创建时都获得一个唯一的,递增的id,以使两个对象没有机会获得相同的id。
以下代码将实现这一目标吗?
class MyClass
{
private static int currentOrderingId;
private int orderingId;
public MyClass()
{
Interlocked.Exchange(ref orderingId, Interlocked.Increment(ref currentOrderingId));
}
}
答案 0 :(得分:3)
您只需要这样做:
orderingId = Interlocked.Increment(ref currentOrderingId);
两个线程不可能再收到相同的值,所以它是线程安全的。