5

次の方法は、一度に 1 つのスレッドだけが 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;
    }
}
4

2 に答える 2

7

そうしない理由がわかりません。ロックオブジェクトとメソッドの両方がstatic. Mutex決定する必要があるのは、 、SpinLockReaderWriterLock、またはのようなより洗練された形式のロックが必要かどうかだけですSemaphore

あなたはそれらを勉強する必要があるでしょう、そしてここに始めるための良いリンクがあります.

于 2013-10-23T12:43:09.650 に答える
3

はい、両方のスレッドがロック オブジェクトと同じ静的オブジェクトを使用し、互いに待機する必要があるため、問題なく動作します。

編集

Dan のコメントに基づいて: プロパティを作成Seq し、 dtDiffそれらへのアクセスを同じロック内に配置することを検討してください。

于 2013-10-23T12:44:28.223 に答える