2016-12-05 1 views
5

I eine einfache Schleife haben für:Verwenden von Multi-Kern (-gewinde) Prozessor für die FOR-Schleife

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

Ich möchte DoSomething(1) in Prozessor-Thread 1,
DoSomething(2) in Gewinde 2
tun ...
DoSomething(8) in Gewinde 8.

Ist es möglich? Wenn ja, wie?

Danke für die Antworten.

+3

Warum wollen Sie hartcodieren die Fäden? Warum benutzt du 'Parallel.For' nicht? –

+1

Haben Sie 'Parallel' überprüft? –

Antwort

11

können Sie versuchen, 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 (Parallel Linq) ist eine Alternative:

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

Danke Dmitry, ich frage mich, ob es eine andere Methode als Parallel.For Schleife gibt. –

+0

@Monna L: * PLinq * kann bequem sein, wenn Sie mit Parallelität * spielen *: es ist sehr einfach, Optionen z. '.WithExecutionMode (ParallelExecutionMode.ForceParallelism)' wechseln zurück in den sequentiellen Modus '.AsSequential()' usw. –

+0

@MonnaL Sie könnten Threads verwenden, aber es ist weitaus komplexer als Beispiel für Paralelismus über – cichy