I need to do some task in parallel using semaphore. I try this:
Semaphore sema = new Semaphore(2,2); Thread[] Threads = new Thread[5]; for (int k = 0; k < 5; k++) { sema.WaitOne(); Console.WriteLine((k + 1) + " started"); Threads[k] = new Thread(ThreadMethod1); Threads[k].Start(k + 1); sema.Release(); } static void ThreadMethod1(object id) { Thread.Sleep(50); Console.WriteLine(id + " completed"); } Output looks like:
1 started 2 started 3 started 4 started 5 started 1 completed 2 completed 4 completed 3 completed 5 completed Isn't semaphore supposed to let only 2 threads to run? I don't get it or doing something wrong?