c# - 锁定创建 ID 的对象

标签 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;
    }
}

最佳答案

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

你需要研究那些,这里是一个 good link to get started .

关于c# - 锁定创建 ID 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19541990/

相关文章:

c# - 实体 - Linq to Sql 只加载实体的一部分

c# - 使用 ApplicationSettingsBase 存储通用 List<CustomObject>

ios - 自定义 iOS 锁定应用程序

安卓锁屏: activity started first when mobile on

C fcntl 抽象函数不起作用

c# - 你能帮助我理解这个使用 C# 闭包的斐波那契示例吗?

c# - 是否有一种方法可以在选择其他语言时获得自定义控件在VS编辑器中显示正确的语言

c# - 比较两个列表中的项目并用 LINQ 替换 foreach 循环

C++11 线程卡在锁定互斥锁上

c++ - 加锁前检查Thread是否已经加锁mutex