2016-12-05 60 views
5

我有一個簡單的循環:使用多核心(-thread)處理器,用於循環

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

我願做DoSomething(1)在處理器線程1,
DoSomething(2)螺紋2
...
DoSomething(8)在線程8中。

可能嗎?如果是,比如何?

感謝您的回答。

+3

你爲什麼要硬編碼的線程?爲什麼不使用'Parallel.For'? –

+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

謝謝德米特里,我想知道是否有另一種方法比Parallel.For循環。 –

+0

@Monna L:* PLinq *可以方便您*播放*並行:可以非常容易地添加選項,例如'.WithExecutionMode(ParallelExecutionMode.ForceParallelism)'切換回順序模式'.AsSequential()'等等 –

+0

@MonnaL你可以使用線程,但它比上面 – cichy