प्रक्रियाओं की संख्या को सीमित करने के लिए एक स्थिर चर

मेरे पास एक वर्ग के कई उदाहरण हैं जिनमें एक कार्य है जो कुछ प्रक्रिया करता है जो एक घंटे से अधिक समय तक चलता है, और मुझे सभी मामलों में एक समय में केवल 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
0
@DarinDimitrov नहीं, मैं धागे के भीतर एक प्रक्रिया शुरू नहीं कर रहा हूं, मुझे चल रही प्रक्रियाओं की संख्या सीमित करने की परवाह है, मुझे धागे की संख्या के बारे में परवाह नहीं है
जोड़ा लेखक FPGA, स्रोत
@DarinDimitrov कोई जांच नहीं;)
जोड़ा लेखक FPGA, स्रोत
क्या आप प्रक्रिया और धागे की धारणा को भ्रमित नहीं कर रहे हैं? वे काफी अलग कलाकृतियों हैं। क्या आप थ्रेड की संख्या सीमित करने के बारे में नहीं पूछ रहे थे, न कि प्रक्रियाओं की संख्या?
जोड़ा लेखक Darin Dimitrov, स्रोत
क्षमा करें, मैंने आपके प्रश्न को गलत तरीके से पढ़ा होगा।
जोड़ा लेखक Darin Dimitrov, स्रोत

1 उत्तर

0
जोड़ा
दिलचस्प परीक्षण करेंगे
जोड़ा लेखक FPGA, स्रोत