我有這樣的代碼:鎖聲明飽和
class Program
{
static void Main(string[] args)
{
TestClass instanceOfClass = new TestClass();
while (true)
{
Thread threadTest = new Thread(new ParameterizedThreadStart(AddNewToClass));
threadTest.Start(instanceOfClass);
}
}
static void AddNewToClass(object parameter)
{
var instance = (TestClass)parameter;
while (true)
{
if (instance.Contains(1))
{
continue;
}
else
{
instance.AddNew(1);
}
}
}
}
class TestClass
{
public Dictionary<int, string> dictionary;
public TestClass()
{
dictionary = new Dictionary<int, string>();
}
public void AddNew(int test)
{
lock (dictionary)
{
dictionary.Add(test, "Test string");
}
}
public bool Contains(int test)
{
lock (dictionary)
{
if (dictionary.ContainsKey(test))
{
return true;
}
else
{
return false;
}
}
}
}
我想做的事情,就是有從字典添加/刪除對象中有數個不同的線程。我試着運行這個,我得到這個異常:
具有相同密鑰的項目已被添加。
這看起來非常奇怪。據我所知,鎖定語句應該阻止有問題的字典和TestClass.Contains(1)應該總是返回true,並且它拋出一個異常,因爲它多次返回true(因此是例外)。
任何人都知道爲什麼會發生這種情況?感謝
謝謝。不知道這件事 – Pacha 2012-08-01 01:59:33