一个静态变量来限制进程数

时间:2013-12-02 21:20:37

标签: c#

我有一个类的多个实例,它具有一个持续一个多小时的某个进程的函数,我需要在所有实例中一次只允许最多2个进程运行,并且如果进程数是多少是2然后它必须等到运行过程的值低于2,所以我想出了这个

    public class SomeClass
    {
       private static int _ProcessesRunningCount=0;
       public int ProcessesRunningCount
       {
           get {return Interlocked.CompareExchange(ref _ProcessesRunningCount, 0, 0); }
       }

       public void StartProcessing()
       {
           if (ProcessesRunningCount < 2)
           {
               Interlocked.Increment(ref _ProcessesRunningCount);
               Task.Factory.StartNew(() => Process());
           }
           else
           {
               //wait and start after _ProcessesRunningCount gets to less than 2
           }
       }

       private void Process()
       {
           //Do the processing
           System.Threading.Thread.Sleep(100000);
           Interlocked.Decrement(ref _ProcessesRunningCount);  
       }
    }

但是我不确定如何实现等待部分,并且不确定这是否是一种很好的方法,但我不想创建一个处理所有内容的管理器类

例如

var A = new SomeClass();
var B = new SomeClass();
var C = new SomeClass();
var D = new SomeClass();
A.StartProcessing(); //process will start
B.StartProcessing(); //process will start
C.StartProcessing(); //process will wait until _ProcessesRunningCount goes under 2
D.StartProcessing(); //process will wait until _ProcessesRunningCount goes under 2

1 个答案:

答案 0 :(得分:2)

您可以使用信号量来限制旋转的进程数。 MSDN上的示例应该适合您当前的设计。信号量类似于互斥锁(锁),但它允许多于1个线程访问临界区。示例中的Thread将启动Process并应阻止,直到进程退出。