用C#的lock()的问题。当lock(string)产生的问题。
l8487 2010-03-16 12:43:13 代码如下
static void Main(string[] args)
{
for (int i = 0; i <10; i++)
{
Thread td = new Thread(ReadInt);
string[] param ={ i.ToString() };
td.Start(param);
}
Console.ReadLine();
}
private static string obj="0";
public static void ReadInt(object param)
{
string[] parmm = (string[])param;
string mynumber = parmm[0].ToString();
for (int j = 0; j < 10; j++)
{
lock (obj)
{
//第一段代码。输出的内容出现重复的obj值
Console.WriteLine("我是第" + mynumber + "个线程。。我读到的值为 " + obj.ToString());
obj = (Convert.ToInt32(obj) + 1).ToString("D3");
//第二段代码。输出的内容不包含重复的obj值
//obj = (Convert.ToInt32(obj) + 1).ToString("D3");
//Console.WriteLine("我是第" + mynumber + "个线程。。我读到的值为 " + obj.ToString());
}
}
}
第一段代码输出如下:(按理说被锁住以后,不应该出现相同的obj值的)
我是第1个线程。。我读到的值为 0
我是第1个线程。。我读到的值为 001(重复值)
我是第0个线程。。我读到的值为 001(重复值)
我是第0个线程。。我读到的值为 003
我是第0个线程。。我读到的值为 004
我是第1个线程。。我读到的值为 002
我是第1个线程。。我读到的值为 006
第二段代码输出如下:(不会出现重复值。)
我是第0个线程。。我读到的值为 001
我是第1个线程。。我读到的值为 002
我是第0个线程。。我读到的值为 005
我是第0个线程。。我读到的值为 007
我是第0个线程。。我读到的值为 008
我是第0个线程。。我读到的值为 009
我是第0个线程。。我读到的值为 011.