唯一整数多线程

Unique integer multiple threads

我正在尝试生成可从多个线程使用的唯一 integer ID。

public partial class Form1 : Form
{
    private static int sharedInteger;
    ...

private static int ModifySharedIntegerSingleTime()
{
    int unique = Interlocked.Increment(ref sharedInteger);

    return unique;
}

SimulateBackTestRow1()
{
    while (true)
    {
        int num = ModifySharedIntegerSingleTime();
    }
}
SimulateBackTestRow2()
{
    while (true)
    {
        int num = ModifySharedIntegerSingleTime();
    }
}

Task modifyTaskOne = Task.Run(() => SimulateBackTestRow1());
Task modifyTaskTwo = Task.Run(() => SimulateBackTestRow2());

但是,当采用以前未使用过的唯一编号的代码传递给 ModifySharedIntegerSingleTime 获取的编号时,我遇到了与非唯一编号的冲突。

thread-safe 方式获取唯一 int ID 的正确方法是什么?

您只有 2^32 个具有整数的唯一值。由于您在循环中尽可能快地生成值,因此生成超过 运行 所需的约 40 亿个值并开始返回您已经使用并导致的值不会花费您很长时间碰撞。要么你的程序中有一些错误导致你生成比实际需要更多的新值,要么你需要使用具有更多值的类型,例如 long 或 GUID。