Infinite loop in release mode

前端 未结 4 564
Happy的楠姐
Happy的楠姐 2020-12-15 19:08

When I run the following code in debug mode, it\'ll successfully finish and exit. However, if I run the following code in release mode, it\'ll get stuck i

4条回答
  •  渐次进展
    2020-12-15 20:00

    My guess would be processor caching of the stop variable on the main thread. In debug mode the memory model is stricter because the debugger needs to be able to provide a sensible view of the variable's state across all threads.

    Try making a field and marking it as volatile:

    volatile bool stop = false;
    
    static void Main(string[] args)
    {
    
        new Thread(() =>
        {
            Thread.Sleep(1000);
            stop = true;
            Console.WriteLine("Set \"stop\" to true.");
    
        }).Start();
    
        Console.WriteLine("Entering loop.");
    
        while (!stop)
        {
        }
    
        Console.WriteLine("Done.");
    }
    

提交回复
热议问题