我需要使用信號量並行執行一些任務。我試試這個:我使用信號量錯了嗎?
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");
}
輸出的樣子:
1 started
2 started
3 started
4 started
5 started
1 completed
2 completed
4 completed
3 completed
5 completed
是不是應該旗語讓只有2個線程來運行?我不明白或做錯了什麼?
是的,但是您在每個週期的主線程中都要退出信號量,所以信號量總是處於非阻塞狀態。 – xanatos 2015-02-24 09:55:24