锁定创建ID的对象

Bos*_*oss 5 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*oud 7

我认为没有任何理由不会.锁定对象和方法都是static.你需要确定的唯一的事情是,你需要锁定像一个更复杂的形式Mutex,SpinLock,ReaderWriterLock,或Semaphore.

你需要学习这些,这是一个很好的入门链接.

  • 我们没有看到"Seq"和"dtDiff"的声明.在锁定(thisLock){}之外,还有其他东西可能会篡改它们的危险. (3认同)
  • 是的,如果你创建另一个帐户 (2认同)