调试/释放模式 - 不同的行为

时间:2016-01-11 16:19:26

标签: c# multithreading visual-studio-2015 release debug-mode

两个线程(主线程和另一个称为T的线程)可以访问相同的布尔字段。除了while (_bool) { }之外,T什么都不做,2秒后主要为_bool分配错误。

在调试时,T退出循环。

在释放时,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");
        }
    }
}

0 个答案:

没有答案