Thread C#

/*
A Programmer's Introduction to C# (Second Edition)
by Eric Gunnerson
Publisher: Apress  L.P.
ISBN: 1-893115-62-3
*/
// 29 - Threading and Asynchronous Operations\Access Reordering and Volatile
// copyright 2000 Eric Gunnerson
using System;
using System.Threading;
class Problem
{
    int x;
    int y;
    int curx;
    int cury;
    
    public Problem()
    {
        x = 0;
        y = 0;
    }
    
    public void Process1()
    {
        x = 1;
        cury = y;
    }
    
    public void Process2()
    {
        y = 1;
        curx = x;
    }
    
    public void TestCurrent()
    {
        Console.WriteLine("curx, cury: {0} {1}", curx, cury);
    }
}
public class AccessReorderingandVolatile
{
    public static void Main()
    {
        Problem p = new Problem();
        
        Thread t1 = new Thread(new ThreadStart(p.Process1));        
        Thread t2 = new Thread(new ThreadStart(p.Process2));        
        t1.Start();
        t2.Start();
        
        t1.Join();
        t2.Join();
        
        p.TestCurrent();
    }
}