Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ThreadRestriction
{
public class Program
{
const int threadCountLimit = 6;
static Semaphore semaphore = new Semaphore(threadCountLimit, threadCountLimit);
public static void Main(string[] args)
{
IList<string> data = new List<string>();
data.Add("data 1");
data.Add("data 2");
data.Add("data 3");
data.Add("data 4");
data.Add("data 5");
data.Add("data 6");
data.Add("data 7");
data.Add("data 8");
data.Add("data 9");
data.Add("data 10");
data.Add("data 11");
data.Add("data 12");
data.Add("data 13");
data.Add("data 14");
data.Add("data 15");
data.Add("data 16");
for (int i = 0; i < data.Count; i++)
{
Program prog = new Program();
Thread newThread = new Thread(prog.DoProcess);
newThread.Name = String.Concat("Thread ", data[i]);
newThread.Start(data[i].ToString());
}
Console.ReadKey();
}
public void DoProcess(object data)
{
semaphore.WaitOne();
Console.WriteLine("{0} Job started ", Thread.CurrentThread.Name);
Console.WriteLine("Data = '{0}'", data);
Thread.Sleep(10000);
Console.WriteLine("{0} Job End ", Thread.CurrentThread.Name);
semaphore.Release();
}
}
}