我有100个线程,我想确保一次最多三个线程按顺序运行它们。
即
我的数字从1到100.我想打印如下
Thread1
Thread2
thread3
'
'
'
但是一次只允许三个线程。一旦来自1,2,3的任何线程完成。顺序的下一个线程应该开始。
我知道我们可以使用semaphoreslim,但有兴趣知道用Mutex或其他方式回答。
假设我有一个应用程序,一次最多可以服务3个请求。但我收到100个请求,并希望以FIFO顺序为它们提供服务,一次最多3个。希望这清除了疑点,
答案 0 :(得分:2)
要同时运行最多三个线程,应使用大小为3的线程池。您应该实现一个线程池模式,该模式将执行请求排入FIFO队列,并且最多可以同时执行三个请求。
线程池将保证您的请求开始以相同的顺序执行,因为它使用FIFO队列。但是,这并不能保证他们能够以相同的顺序完成执行。
答案 1 :(得分:0)
你应该省去使用原始线程的痛苦,并选择一个能够为你完成所有难题的框架。
我建议使用Mircosoft的Reactive Framework(NuGet" Rx-Main")。代码非常简单:
var subscription =
Observable
.Range(0, 100)
.Select(n => Observable.Start(() =>
{
Thread.Sleep(100);
return n;
}))
.Merge(maxConcurrent: 3)
.Subscribe(n => Console.WriteLine(n));
使用此代码我得到了这个结果:
1
3
2
0
5
6
7
4
8
9
...
95
97
96
98
99
您可以通过调用subscription.Dispose();
停止计算。