Потокобезопасность static полей
Всегда думал, что доступ к статик полю с целю модификации из разных потоков приводит к undefined behavior, но оказалось что это не так.
В тестовых целях написал следующее
static class StaticTest
{
public static XClass X = new XClass();
internal class XClass
{
public int Count;
}
}
class Program
{
static void Main(string[] args)
{
var resetEvent = new ManualResetEvent(false);
Enumerable
.Range(0, 5)
.ToList()
.ForEach(_ =>
new Thread(() =>
{
resetEvent.WaitOne();
StaticTest.X.Count++;
})
.Start());
resetEvent.Set();
Thread.Sleep(3000);
Console.WriteLine(StaticTest.X.Count);
Console.ReadLine();
}
}
Пробовал так же Parallel.Invoke, все варианты в итоге дали 5.
В чем может быть проблема?