锁定创建 ID 的对象

本文关键字:对象 ID 创建 锁定 | 更新日期: 2023-09-27 18:36:44

以下方法是否确保一次只有一个线程可以读取 ID?我有一个使用以下方法的并行进程,我需要它来返回唯一的 ID。不幸的是,我无法更改ID的结构方式。

private static int Seq = 0;
private static long dtDiff = 0;
private static object thisLock = new object();
private static object BuildClientID(string Code)
{
    lock (thisLock)
    {
        object sReturn = "";
        Seq++;
        dtDiff++;                
        if (Seq == 1000)
        {
            Seq = 0;
            dtDiff = DateAndTime.DateDiff(DateInterval.Second, DateTime.Parse("1970-01-01"), DateTime.Now);
         }
         sReturn = dtDiff.ToString() + Code + Seq.ToString("000");
            return sReturn;
    }
}

锁定创建 ID 的对象

我看不出有任何理由不这样做。锁定对象和方法都static。你唯一需要确定的是,你是否需要一种更复杂的锁定形式,如MutexSpinLockReaderWriterLockSemaphore

您需要学习这些内容,这是一个很好的入门链接。

是的,它可以正常工作,因为两个线程都将使用与锁定对象相同的静态对象,并且必须相互等待。

编辑

根据 Dan 的评论:考虑制作SeqdtDiff属性,并将对它们的访问放在同一个锁中。