【发布时间】:2015-02-24 18:03:05
【问题描述】:
我需要使用信号量并行执行一些任务。我试试这个:
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 个线程运行吗?我不明白还是做错了什么?
【问题讨论】:
-
是的,但是你是在每个循环的主线程中进入退出信号量,所以信号量会一直处于非阻塞状态。
标签: c# multithreading semaphore