C# 锁定创建ID的对象

C# 锁定创建ID的对象,c#,locking,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) {

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

我看没有任何理由不这样做。锁定对象和方法都是静态的。唯一需要确定的是,是否需要更复杂的锁定形式,如
互斥锁
自旋锁
读写锁
,或
信号灯


您需要研究它们,这里是一个。

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

编辑


基于丹的注释:考虑制作<代码> SEQ >和<代码> DTTIFR 属性,并将它们访问到同一个锁内。

YEA,如果您在一个帖子上创建另一个帐号,不,在两个不同的帖子上各有一次,是的。我们没有看到<代码> SEQ < /C> >和<代码> DTTIFR 。在
锁(thisLock){}
之外有可能被其他东西篡改。