Interlocked.Increment and Interlocked.Decrement : Interlocked « Thread « C# / CSharp Tutorial






using System;
using System.Threading;

class Test
{
    static void Main()
    {
        Thread thread1 = new Thread(new ThreadStart(ThreadMethod));
        Thread thread2 = new Thread(new ThreadStart(ThreadMethod));
        thread1.Start();
        thread2.Start();
        thread1.Join();
        thread2.Join();

        GC.Collect();
        GC.WaitForPendingFinalizers();

        Console.WriteLine(CountClass.UnsafeInstanceCount);
        Console.WriteLine(CountClass.SafeInstanceCount);
    }

    static void ThreadMethod()
    {
        for(int i = 0; i < 10; i++)
        {
            new CountClass();
        }
    }
}

class CountClass
{
    static int unsafeInstanceCount = 0;
    static int   safeInstanceCount = 0;

    static public int UnsafeInstanceCount
    {
        get {return unsafeInstanceCount;}
    }

    static public int SafeInstanceCount
    {
        get {return safeInstanceCount;}
    }

    public CountClass()
    {
        unsafeInstanceCount++;
        Interlocked.Increment(ref safeInstanceCount);
    }

    ~CountClass()
    {
        unsafeInstanceCount--;
        Interlocked.Decrement(ref safeInstanceCount);
    }
}








20.14.Interlocked
20.14.1.Use the Interlocked object
20.14.2.Use Interlocked operations
20.14.3.Interlocked.Increment and Interlocked.Decrement
20.14.4.Interlocked