2016-12-05 7 views
5

के लिए मैं के लिए एक सरल पाश के लिए प्रोसेसर का उपयोग करना:मल्टी कोर (-thread) पाश

for (int i = 1; i <= 8; i++) 
{ 
    DoSomething(i); 
} 
int nopt = 8; //number of processor threads 

मैं प्रोसेसर धागा 1 में DoSomething(1) करना चाहते हैं,
DoSomething(2) धागा 2
में ...
DoSomething(8) धागे में 8.

क्या यह संभव है? अगर हाँ से कैसे?

उत्तर के लिए धन्यवाद।

+3

क्यों आप कड़ी मेहनत से कोड को धागे चाहते हैं? आप 'समांतर' के लिए क्यों नहीं उपयोग करते हैं? –

+1

क्या आपने 'समांतर' की जांच की है? –

उत्तर

11

आप Parallel.For कोशिश कर सकते हैं:

int nopt = 8; 

    ParallelOptions po = new ParallelOptions() { 
    MaxDegreeOfParallelism = nopt, 
    }; 

    // 9 is exclusive when you want i <= 8 
    Parallel.For(1, 9, po, i => DoSomething(i)); 

PLinq (समांतर Linq) है एक विकल्प:

Enumerable 
    .Range(1, 8) 
    .AsParallel() 
    .WithDegreeOfParallelism(nopt) 
    .ForAll(i => DoSomething(i)); 
+0

धन्यवाद दिमित्री, मैं सोच रहा था कि समांतर की तुलना में कोई और तरीका है। लूप के लिए। –

+0

@Monna L: * PLinq * सुविधाजनक * समांतरता के साथ * प्ले * सुविधाजनक हो सकता है: विकल्पों को जोड़ने में बहुत आसान है उदा। '.WithExecutionMode (parallelExecutionMode.ForceParallelism) 'अनुक्रमिक मोड पर वापस स्विच करें .अनुक्रमिक()' आदि –

+0

@MonnaL आप थ्रेड का उपयोग कर सकते हैं, लेकिन – cichy

संबंधित मुद्दे