Воспроизвести разорванные чтения десятичного числа в C #

Видеть значит верить. Может кто-нибудь воспроизвести программу, которая читает порванный десятичный? Я попытался раскрутить несколько потоков, меняя одно и то же десятичное число от 1 до 2. Я не перехватывал ни одного чтения, отличного от 1 или 2.

РЕДАКТИРОВАТЬ: Мне нравится видеть, что поток чтения не видит атомного изменения из потока записи, поэтому значение должно быть чем-то отличным от 1 или 2.

void TornDecimalReadTest()
    {
        decimal sharedDecimal = 1;
        int threadCount = 100;
        var threads = new List<Thread>();

        for (int i = 0; i < threadCount; i++)
        {
            int threadId = i;
            var thread = new Thread(() =>
            {
                Thread.Sleep(5000);

                decimal newValue = threadId % 2 == 0 ? 1 : 2;
                bool isWriterThread = threadId % 2 == 0;

                Console.WriteLine("Writer : " + isWriterThread + " - will set value " + newValue);

                for (int j = 0; j < 1000000; j++)
                {
                    if (isWriterThread)
                        sharedDecimal = newValue;

                    decimal decimalRead = sharedDecimal;

                    if (decimalRead != 1 && decimalRead != 2)
                        Console.WriteLine(decimalRead);
                }
            });

            threads.Add(thread);
        }

        threads.ForEach(x => x.Start());
        threads.ForEach(x => x.Join());
    }

Ответы на вопрос(1)

Ваш ответ на вопрос