我调用了多个线程以生成一个数字,但我希望使用所有线程来生成一个唯一的号码(例如,一个线程生成一个编号ABC1,而第二个线程必须生成ABC2,以此类推)。
我调用了多个线程以生成一个数字,但我希望使用所有线程来生成一个唯一的号码(例如,一个线程生成一个编号ABC1,而第二个线程必须生成ABC2,以此类推)。
您可以使用Interlocked.Increment
,这将在计数器上完成线程安全的增量。
public class Person
{
private static int _counter;
public string GetNewId()
{
int id = Interlocked.Increment(ref _counter);
return $"ABC{id}";
}
}
Interlocked.Increment
相对于实现 lock
来说速度较快。 - Gerald Chifanzwaprivate static object _lock = new object();
private static int mIdx = 0;
public static string GenerateNumber()
{
lock (_lock)
{
return $"ABC{mIdx++}";
}
}