我希望原子地增加一个静态变量,同时以无锁的方式将新值赋给实例字段。目标是每个对象在创建时获得一个唯一的递增id,这样两个对象就没有机会获得相同的id。
下面的代码会实现这一点吗?
class MyClass
{
private static int currentOrderingId;
private int orderingId;
public MyClass()
{
Interlocked.Exchange(ref orderingId, Interlocked.Increment(ref currentOrderingId));
}
}发布于 2018-07-20 13:14:16
你只需要这样做:
orderingId = Interlocked.Increment(ref currentOrderingId);两个线程不可能接收相同的值,所以它是threadsafe。
https://stackoverflow.com/questions/51442857
复制相似问题