结合互锁增量和互锁交换

时间:2018-07-20 12:45:01

标签: c# .net multithreading

我希望以原子方式递增静态变量,并同时以无锁方式将新值分配给实例字段。目的是使每个对象在创建时都获得一个唯一的,递增的id,以使两个对象没有机会获得相同的id。

以下代码将实现这一目标吗?

class MyClass
{
    private static int currentOrderingId;
    private int orderingId;

    public MyClass()
    {
        Interlocked.Exchange(ref orderingId, Interlocked.Increment(ref currentOrderingId));
    }
}

1 个答案:

答案 0 :(得分:3)

您只需要这样做:

orderingId = Interlocked.Increment(ref currentOrderingId);

两个线程不可能再收到相同的值,所以它是线程安全的。