Concurrency and Source Panels
Atomic Ticket
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.