我有一個簡單的循環:使用多核心(-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中。
可能嗎?如果是,比如何?
感謝您的回答。
我有一個簡單的循環:使用多核心(-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中。
可能嗎?如果是,比如何?
感謝您的回答。
您可以嘗試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));
謝謝德米特里,我想知道是否有另一種方法比Parallel.For循環。 –
@Monna L:* PLinq *可以方便您*播放*並行:可以非常容易地添加選項,例如'.WithExecutionMode(ParallelExecutionMode.ForceParallelism)'切換回順序模式'.AsSequential()'等等 –
@MonnaL你可以使用線程,但它比上面 – cichy
你爲什麼要硬編碼的線程?爲什麼不使用'Parallel.For'? –
您是否檢查過「並行」? –