Почему потоки работают правильно?
Есть следующий кусок кода
//private static SafeQueue<int> _safeQueue = new();
private static List<Thread> _threads = new();
private static Dictionary<int, int> _monitoringThreads = new();
static void Main(string[] args)
{
Console.WriteLine("Working...");
for (int i = 1; i <= 3; i++)
{
Thread thread = new Thread(TheadProc);
_monitoringThreads.Add(thread.ManagedThreadId, 0);
thread.Start(i);
_threads.Add(thread);
}
Console.Read();
//var count = _safeQueue.GetCountElementsInQueue();
;
//_safeQueue.Dispose();
}
private static void TheadProc(object obj)
{
Console.WriteLine($"Поток: {(int)obj}");
for (int i = 0; i < 1000000; i++)
{
//_safeQueue.Enqueue(i);
_monitoringThreads[Thread.CurrentThread.ManagedThreadId]++;
}
}
Почему при добавлении значений в словарь не возникает проблем? Хотя он здесь является разделяемым ресурсом и по логике его нужно залочить или использовать Interlocked.
Источник: Stack Overflow на русском