Run two named thread methods and collect their results in stable slots.

thread Threads may finish in either order, so shared examples should write to stable positions before the main thread joins and reads them.

Thread Result Slots

seed
ThreadResultSlots.cs
Replay: real traced execution (multi-file project)
using System;
using System.Threading;

class Program
{
    static int baseScore;
    static int leftResult;
    static int rightResult;

    static void LeftWorker()
    {
        int adjusted = baseScore + 2;
        leftResult = adjusted;
    }

    static void RightWorker()
    {
        int adjusted = baseScore * 2;
        rightResult = adjusted;
    }

    static void Main()
    {
        int seed = 10;
        baseScore = seed;

        Thread left = new Thread(LeftWorker);
        Thread right = new Thread(RightWorker);

        left.Start();
        right.Start();

        left.Join();
        right.Join();

        int total = leftResult + rightResult;
        Console.WriteLine($"seed={seed}");
        Console.WriteLine($"total={total}");
    }
}
using System;
using System.Threading;

class Program
{
    static int baseScore;
    static int leftResult;
    static int rightResult;

    static void LeftWorker()
    {
        int adjusted = baseScore + 2;
        leftResult = adjusted;
    }

    static void RightWorker()
    {
        int adjusted = baseScore * 2;
        rightResult = adjusted;
    }

    static void Main()
    {
        int seed = 4;
        baseScore = seed;

        Thread left = new Thread(LeftWorker);
        Thread right = new Thread(RightWorker);

        left.Start();
        right.Start();

        left.Join();
        right.Join();

        int total = leftResult + rightResult;
        Console.WriteLine($"seed={seed}");
        Console.WriteLine($"total={total}");
    }
}
using System;
using System.Threading;

class Program
{
    static int baseScore;
    static int leftResult;
    static int rightResult;

    static void LeftWorker()
    {
        int adjusted = baseScore + 2;
        leftResult = adjusted;
    }

    static void RightWorker()
    {
        int adjusted = baseScore * 2;
        rightResult = adjusted;
    }

    static void Main()
    {
        int seed = 20;
        baseScore = seed;

        Thread left = new Thread(LeftWorker);
        Thread right = new Thread(RightWorker);

        left.Start();
        right.Start();

        left.Join();
        right.Join();

        int total = leftResult + rightResult;
        Console.WriteLine($"seed={seed}");
        Console.WriteLine($"total={total}");
    }
}
  1. seed ← 10, baseScore ← 10, left ← System.Threading.Thread, right ← System.Threading.Thread

    22static void Main()23{24    int seed→ 10 = 10; //@seed=4, 2025    baseScore→ 10 = seed10;2627    Thread left→ System.Threading.Thread = new Thread(LeftWorker);28    Thread right→ System.Threading.Thread = new Thread(RightWorker);2930    leftSystem.Threading.Thread.Start();31    rightSystem.Threading.Thread.Start();
  2. adjusted ← 12, leftResult ← 12

    10static void LeftWorker()11{12    int adjusted→ 12 = baseScore10 + 2;13    leftResult→ 12 = adjusted12;14}
  3. adjusted ← 20, rightResult ← 20

    16static void RightWorker()17{18    int adjusted→ 20 = baseScore10 * 2;19    rightResult→ 20 = adjusted20;20}
  4. total ← 32

    30    left.Start();31    rightSystem.Threading.Thread.Start();3233    leftSystem.Threading.Thread.Join();34    rightSystem.Threading.Thread.Join();3536    int total→ 32 = leftResult12 + rightResult20;37    Console.WriteLine($"seed={seed10}");38    Console.WriteLine($"total={total32}");39}
    outputseed=10
    total=32
  1. seed ← 4, baseScore ← 4, left ← System.Threading.Thread, right ← System.Threading.Thread

    22static void Main()23{24    int seed→ 4 = 4;25    baseScore→ 4 = seed4;2627    Thread left→ System.Threading.Thread = new Thread(LeftWorker);28    Thread right→ System.Threading.Thread = new Thread(RightWorker);2930    leftSystem.Threading.Thread.Start();31    rightSystem.Threading.Thread.Start();
  2. adjusted ← 6, leftResult ← 6

    10static void LeftWorker()11{12    int adjusted→ 6 = baseScore4 + 2;13    leftResult→ 6 = adjusted6;14}
  3. adjusted ← 8, rightResult ← 8

    16static void RightWorker()17{18    int adjusted→ 8 = baseScore4 * 2;19    rightResult→ 8 = adjusted8;20}
  4. total ← 14

    30    left.Start();31    rightSystem.Threading.Thread.Start();3233    leftSystem.Threading.Thread.Join();34    rightSystem.Threading.Thread.Join();3536    int total→ 14 = leftResult6 + rightResult8;37    Console.WriteLine($"seed={seed4}");38    Console.WriteLine($"total={total14}");39}
    outputseed=4
    total=14
  1. seed ← 20, baseScore ← 20, left ← System.Threading.Thread, right ← System.Threading.Thread

    22static void Main()23{24    int seed→ 20 = 20;25    baseScore→ 20 = seed20;2627    Thread left→ System.Threading.Thread = new Thread(LeftWorker);28    Thread right→ System.Threading.Thread = new Thread(RightWorker);2930    leftSystem.Threading.Thread.Start();31    rightSystem.Threading.Thread.Start();3233    leftSystem.Threading.Thread.Join();34    right.Join();
  2. adjusted ← 40, rightResult ← 40

    16static void RightWorker()17{18    int adjusted→ 40 = baseScore20 * 2;19    rightResult→ 40 = adjusted40;20}
  3. adjusted ← 22, leftResult ← 22

    10static void LeftWorker()11{12    int adjusted→ 22 = baseScore20 + 2;13    leftResult→ 22 = adjusted22;14}
  4. total ← 62

    33    leftSystem.Threading.Thread.Join();34    rightSystem.Threading.Thread.Join();3536    int total→ 62 = leftResult22 + rightResult40;37    Console.WriteLine($"seed={seed20}");38    Console.WriteLine($"total={total62}");39}
    outputseed=20
    total=62