0

2 つのスレッド (メイン スレッドと T と呼ばれる別のスレッド) は、同じブール フィールドにアクセスできます。T は何もせず、Main は2 秒後にwhile (_bool) { }false を割り当てます。_bool

デバッグでは、T はループを終了します。

Release では、T は決してループを終了しません。

なんで?

編集:

さらに、なぜこれvolatile_bool解決するのですか?

using System;
using System.Threading;

namespace ConsoleApplication1
{
    internal class Program
    {
        private bool _bool = true;

        private static void Main()
        {
            var program = new Program();
            var t = new Thread(SomeThread);
            t.Start(program);

            Thread.Sleep(2000);
            program._bool = false;
            Console.WriteLine(program._bool);
        }

        private static void SomeThread(object obj)
        {
            var p = obj as Program;
            Console.WriteLine("Entered loop");
            while (p._bool)
            {

            }
            Console.WriteLine("Exited Loop");
        }
    }
}
4

0 に答える 0