using System; using System.Threading; public class SyncTest { public static int[] a = new int[100]; public static bool stop = false; public static bool incorrect = false; public static int Main() { int i; Thread[] threads = new Thread[10]; // Fill in the array for (i = 0; i < 100; i++) a[i] = i + 1; for (i = 0; i < 10; i++) { threads[i] = new Thread( new ThreadStart(CheckSum) ); threads[i].Name = "Thread " + (i + 1).ToString(); threads[i].Start(); } Mix(); stop = true; if (!incorrect) Console.WriteLine("Sum is correct!"); return 0; } public static void Mix() { Console.WriteLine("mixing..."); Random rnd = new Random(); DateTime start = DateTime.Now; while (!stop && (DateTime.Now - start).Seconds < 10) { int i = rnd.Next(0, 100); int j = rnd.Next(0, 100); // Console.WriteLine("swapping ({0}, {1})", i, j); int tmp = a[i]; a[i] = a[j]; a[j] = tmp; } } public static void CheckSum() { while (!stop) { int s = 0; for (int i = 0; i < 100; i++) { s += a[i]; } if (s != 5050) { Console.WriteLine( "{0}: Sum = {1} -- incorrect!", Thread.CurrentThread.Name, s ); incorrect = true; stop = true; } } } }