日期:2014-05-17 浏览次数:20452 次
void funcB(int i)
{
if (!list.Contains(i))
{
lock (dummyObject)
{
[color=#FF0000] if (!list.Contains(i))[/color]
{
list.Add(i);
System.Diagnostics.Debug.WriteLine(i);
}
}
}
else
{
System.Diagnostics.Debug.WriteLine(i.ToString() + " existed");
}
}
------解决方案--------------------
God..
失误,
在lock 里 还判断一次,
if (!list.Contains(i))
{
}
------解决方案--------------------
dummyobject
你锁这个变量,和你的list 集合是什么关系。同一个类下面?
是否是 private static object dummyobject=new object();
list 又是什么访问级别。
------解决方案--------------------
Thread t1 = new Thread(new ThreadStart(FunA));
t1.Start();
Thread t2 = new Thread(new ThreadStart(FunA));
t2.Start();
Thread t3 = new Thread(new ThreadStart(FunA));
t3.Start();
Thread t4 = new Thread(new ThreadStart(FunA));
t4.Start();
Thread.Sleep(3000);
Console.WriteLine("the length of lists is {0}", lists.Count);
Console.WriteLine("the elements of lists are:");
foreach (int i in lists)
{
Console.Write(i.ToString() + " ");
}
Console.ReadLine();
public static void FunA()
{
Random rand = new Random();
FunB(rand.Next(1, 10));
}
public static void FunB(Int32 i)
{
Console.WriteLine(i);
if (!lists.Contains(i))
{
lock (lockObject)
{
if (!lists.Contains(i))
{
lists.Add(i);
}
}
}
}