Issue unique ticket numbers from two threads with Interlocked.

Atomic Ticket

AtomicTicket.cs
using System;
using System.Threading;

class Program
{
    static int nextTicket;
    static int firstTicket;
    static int secondTicket;

    static void FirstWorker()
    {
        firstTicket = Interlocked.Increment(ref nextTicket);
    }

    static void SecondWorker()
    {
        secondTicket = Interlocked.Increment(ref nextTicket);
    }

    static void Main()
    {
        int start = ;
        nextTicket = start;

        Thread first = new Thread(FirstWorker);
        Thread second = new Thread(SecondWorker);

        first.Start();
        second.Start();

        first.Join();
        second.Join();

        int issued = nextTicket - start;
        Console.WriteLine($"start={start}");
        Console.WriteLine($"issued={issued}");
    }
}
using System;
using System.Threading;

class Program
{
    static int nextTicket;
    static int firstTicket;
    static int secondTicket;

    static void FirstWorker()
    {
        firstTicket = Interlocked.Increment(ref nextTicket);
    }

    static void SecondWorker()
    {
        secondTicket = Interlocked.Increment(ref nextTicket);
    }

    static void Main()
    {
        int start = ;
        nextTicket = start;

        Thread first = new Thread(FirstWorker);
        Thread second = new Thread(SecondWorker);

        first.Start();
        second.Start();

        first.Join();
        second.Join();

        int issued = nextTicket - start;
        Console.WriteLine($"start={start}");
        Console.WriteLine($"issued={issued}");
    }
}
using System;
using System.Threading;

class Program
{
    static int nextTicket;
    static int firstTicket;
    static int secondTicket;

    static void FirstWorker()
    {
        firstTicket = Interlocked.Increment(ref nextTicket);
    }

    static void SecondWorker()
    {
        secondTicket = Interlocked.Increment(ref nextTicket);
    }

    static void Main()
    {
        int start = ;
        nextTicket = start;

        Thread first = new Thread(FirstWorker);
        Thread second = new Thread(SecondWorker);

        first.Start();
        second.Start();

        first.Join();
        second.Join();

        int issued = nextTicket - start;
        Console.WriteLine($"start={start}");
        Console.WriteLine($"issued={issued}");
    }
}
interlocked `Interlocked.Increment` performs a small shared update atomically, so each thread receives a distinct result.