如何在c#代码块中运行最多n个线程?
我喜欢像这个伪代码一样容易和简短的东西
lock (this, 5)
{
//do some work
}
编辑:这不是共享内存,竞争条件的事情。问题是我有很多线程。但我发现,当并行使用太多时,代码的一部分中使用的资源会失败。我可以使用物镜,但我希望我能做到更容易。
答案 0 :(得分:5)
限制可以的线程数 访问资源或资源池 同时进行。
答案 1 :(得分:0)
您可以使用ThreadPool,它允许您设置最小/最大线程数
在下面有一个llok:
http://msdn.microsoft.com/en-us/library/system.threading.threadpool.setmaxthreads.aspx
你应该避免锁定(这个),因为你有可能死锁。看起来应该尽可能多的颗粒。
答案 2 :(得分:0)
您不能这样使用锁,因为这标志着仅用于单次执行的关键部分。我认为,您需要使用自己的信号量(不是代码 - 只是概念)
var semaphore
semaphore.flag 5次
semaphore.wait
做代码
semaphore.flag
我想说如果你打算使用它,你需要了解你在做什么以及它是如何工作的。但是,它是锁使用的机制,因此您应该实现所需。
答案 3 :(得分:0)
我也认为信号量是你正在寻找的。但是,在.NET 4.0中,您可能还有另一种方式。如果你想要5个线程同时运行相同的代码,你可以将它放入Task
并使用TaskScheduler
使.NET最多生成5个线程。只需设置MaximumConcurrencyLevel
属性。
这不会像任何信号量那样做,所以其他线程也可能进入该部分!有关详细信息,另请参阅Task Parallel Library (MSDN)。