如何以线程安全的方式生成顺序唯一ID

时间:2018-11-02 06:06:15

标签: c# multithreading

我已经调用了多个生成数字的线程,但我想在所有线程中生成唯一的no((假设一个线程生成no,即ABC1,但是第二个线程必须生成ABC2,依此类推)

2 个答案:

答案 0 :(得分:4)

您可以使用Interlocked.Increment,这将在计数器上完成线程安全增量。

public class Person
{
    private static int _counter;

    public string GetNewId()
    {
        int id = Interlocked.Increment(ref _counter);
        return $"ABC{id}";
    }
}

答案 1 :(得分:1)

如果只希望使用线程安全的方式生成唯一数字,则可以执行以下操作:

private static object _lock = new object();
private static int mIdx = 0;
public static string GenerateNumber()
{
     lock (_lock)
     {
          return $"ABC{mIdx++}";
     }
}