次のコードがあります。Windows Server 2008 では、プログラムは正しく、期待どおりに実行されます。10個の異なるIDを出力します。
しかし、Windows Server 2003 で実行すると、プログラムが正しくありません。10 個の ID が出力されますが、一部の ID が重複しています。ロックが効かないようです。
を設定Thread.Sleep(500)
すると、Windows Server 2003 で正しく動作します。
class Test
{
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine(Util.GetId());
}
Console.ReadLine();
}
}
public class Util
{
private static object idlock = new object();
public static string GetId()
{
string id = "";
lock (idlock)
{
Thread.Sleep(1);
id = System.DateTime.Now.ToString("yyMMddHHmmssffff");
}
return id;
}
}