static void Main() { var q = new TQueue(); var threads = Enumerable. Range(1, 5). Select(x => new Thread(() => { q.Wait(x); })).ToList(); threads.ForEach(x => x.Start()); Console.WriteLine(); threads.ForEach(x => { q.Signal(); }); }