SoFunction
Updated on 2025-03-07

Example of using Barrier to control thread synchronization


using System;
using ;

class BarrierDemo
{
    static Barrier _barrier = new Barrier (5, barrier => {
            ();
            ("All jobs have been done.");
        });

    static void Main()
    {
        Random r = new Random();

        new Thread(Work).Start(new MyThreadArgs { ThreadId = "A",
            WaitTimeCount = (1000) });
        new Thread(Work).Start(new MyThreadArgs {ThreadId = "B",
            WaitTimeCount = (1000) });
        new Thread(Work).Start(new MyThreadArgs {ThreadId = "C",
            WaitTimeCount = (1000) });
        new Thread(Work).Start(new MyThreadArgs {ThreadId = "D",
            WaitTimeCount = (1000) });
        new Thread(Work).Start(new MyThreadArgs {ThreadId = "E",
            WaitTimeCount = (1000) });
    }

    static void Work(object obj)
    {
        MyThreadArgs args = (MyThreadArgs) obj;

        ("Working on Thread " + );
        ("Thread " + +
            " will sleep for " + + " seconds.");

        (waitTime);

        _barrier.SignalAndWait();
    }

    class MyThreadArgs
    {
        public string ThreadId { get; set; }
        public int WaitTimeCount { get; set; }
    }
}