DZone Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

Snippets has posted 5883 posts at DZone. View Full User Profile

Interprocess Synchronization (safe Threading)

05.02.2007
| 5093 views |
  • submit to reddit
        Three ways for 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();
        }
    }
}