2016-12-05 25 views
5

İÇİN için çok çekirdek (-Thread) işlemci kullanımı:Ben basit bir döngü var döngü

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

Ben, iplik 2
içinde
DoSomething(2) ...
işlemci parçacığı 1'de DoSomething(1) yapmak istiyorum DoSomething(8) numaralı belge 8.

Mümkün mü? Eğer nasılsa evet?

Yanıtlarınız için teşekkürler.

+3

Neden ipler sert kod istiyorsun? Neden Parallel.For' kullanmıyorsunuz? –

+1

'Paralel'i işaretlediniz mi? –

cevap

11

Sen Parallel.For deneyebilirsiniz:

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 (Paralel Linq) 'dir bir alternatif:

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

Teşekkür ederim Dmitry, Parallel.For döngüsünden başka bir yöntem olup olmadığını merak ediyordum. –

+0

@Monna L: * PLinq *, * paralellik ile * oynandığında kullanışlı olabilir: ekleme seçenekleri çok kolay örn. Eğer konuları kullanabilirsiniz, ancak –

+0

Paralellik olmadan iplikler kullanarak bunu yapmak için lütfen? – cichy