锁定创建ID的对象

时间:2013-10-23 12:41:05

标签: c# locking

以下方法是否确保一次只能有一个线程读取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;
    }
}

2 个答案:

答案 0 :(得分:7)

我认为没有任何理由不会。锁定对象和方法都是static。您唯一需要确定的是,您是否需要更复杂的锁定形式,例如MutexSpinLockReaderWriterLockSemaphore

你需要学习这些,这里是good link to get started

答案 1 :(得分:3)

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

修改

根据Dan的评论:考虑制作SeqdtDiff属性,并将其置于同一锁内。