Semaphore
Обмежує кількість одночасно запущених потоків
static Semaphore semaphore = new Semaphore(3, 3); // 3 при старті і 3 потім
static void Main(string[] args)
{
for (int i = 0; i < 6; i++)
{
new Thread(F1).Start();
}
Console.ReadKey();
}
static void F1()
{
Console.WriteLine("Wait... " + Thread.CurrentThread.ManagedThreadId);
semaphore.WaitOne();
Console.WriteLine("START> " + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(3000);
Console.WriteLine("END " + Thread.CurrentThread.ManagedThreadId);
semaphore.Release();
}
Wait... 3
Wait... 6
Wait... 4
Wait... 5
START> 3
Wait... 8
START> 6
Wait... 7
START> 4
END 3
END 6
START> 8
START> 5
END 4
END 8
START> 7
END 5
END 7