using System; using System.Diagnostics; using System.Threading.Tasks; class Program { static volatile int s_x; static volatile int s_xa; static volatile int s_y; static volatile int s_ya; static void Main(string[] args) { while (true) { s_x = 0; s_xa = 0; s_y = 0; s_ya = 0; Task A = Task.Factory.StartNew(() => { s_x = 1; // W s_ya = s_y; // W, R }); Task B = Task.Factory.StartNew(() => { s_y = 1; // W s_xa = s_x; // W, R }); Task.WaitAll(A, B); if (!(s_xa == 1 || s_ya == 1)) Console.WriteLine("* {0}, {1}", s_xa, s_ya); } } }