代码块中最多n个线程

时间:2011-06-30 08:24:57

标签: c# multithreading

如何在c#代码块中运行最多n个线程?

我喜欢像这个伪代码一样容易和简短的东西

lock (this, 5)
{
   //do some work
}
编辑:这不是共享内存,竞争条件的事情。问题是我有很多线程。但我发现,当并行使用太多时,代码的一部分中使用的资源会失败。我可以使用物镜,但我希望我能做到更容易。

4 个答案:

答案 0 :(得分:5)

使用Semaphore

  

限制可以的线程数   访问资源或资源池   同时进行。

答案 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)