Потокобезопасность 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.

В чем может быть проблема?


Ответы (0 шт):