static void Main(string[] args)
{
Test c = new Test();
Thread oThread = new Thread(new ThreadStart(c.Lock));
oThread.Start();
Thread oThread2 = new Thread(new ThreadStart(c.AfterLock));
oThread2.Start();
Console.ReadLine();
}
public class Test
{
public Dictionary<string, string> dic = new Dictionary<string, string>();
public void Lock()
{
lock (((IDictionary)dic).SyncRoot)
{
for (var i = 3; i < 200; i++)
{
Console.WriteLine(i.ToString());
dic.Add(i.ToString(), i.ToString());
}
}
}
public void AfterLock()
{
Console.WriteLine(dic["100"]);
}
}
AfterLock бросает исключение: Данный ключ не присутствовал в словареЧто не так с этим кодом блокировки?
выпо был заблокирован первым потоком? почему afterlock не дождался блокировки первых потоков?
Я думаю, что нам понадобится 1. короткий полный * рабочий * пример, демонстрирующий проблему; * и * 2. точное описание «не работает» (например, точный тип и значение сообщения любого исключения). – Richard
Не считая код, который на самом деле терпел неудачу, была плохая идея. –
Что такое 'ThreadSafeDictionary'? Где замок, с которым вы столкнулись? Как вы ожидаете, что мы поможем вам с проблемой, если вы не покажете нам код, который терпит неудачу? –