Interprocess synchronization (safe threading)
using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace ConsoleApplication12 { class Program { static object thisLock = new object(); static int z = 0; private static void ThrStart() { for (int i = 0; i < 10000; i++) { lock (thisLock) { z++; Console.WriteLine(z); } } } private static void ThrStart2() { for (int i = 0; i < 10000; i++) { Monitor.Enter(thisLock); z++; Console.WriteLine(z); Monitor.Exit(thisLock); } } static Mutex mutex = new Mutex(); private static void ThrStart3() { for (int i = 0; i < 10000; i++) { mutex.WaitOne(); z++; Console.WriteLine(z); mutex.ReleaseMutex(); } } static void Main(string[] args) { Thread t1 = new Thread(new ThreadStart(ThrStart)); Thread t2 = new Thread(new ThreadStart(ThrStart)); t1.Start(); t2.Start(); t1.Join(); t2.Join(); t1 = new Thread(new ThreadStart(ThrStart2)); t2 = new Thread(new ThreadStart(ThrStart2)); t1.Start(); t2.Start(); t1.Join(); t2.Join(); t1 = new Thread(new ThreadStart(ThrStart3)); t2 = new Thread(new ThreadStart(ThrStart3)); t1.Start(); t2.Start(); t1.Join(); t2.Join(); } } }