【发布时间】:2014-03-19 23:01:30
【问题描述】:
我有多个任务,我需要同时在特定的多个内核或处理器上运行它们。
例如,如果我有两个不同的任务或只有一个任务但会运行两次.
我知道如何运行每个特定的处理器,但我不知道如何同时运行它们。我试图使用多线程然后任务并行库在特定处理器上同时运行不同的任务,但我失败了。
在下面的代码中,我尝试使用多线程但它不起作用或者我可以使用任务并行库吗???
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Diagnostics;
namespace ConsoleApplication14
{
class Program
{
public static double DumbCountSqr(int dumnum)
{
Random random = new Random();
int randomNumber = random.Next(0, 10);
double result = 0;
for (int i = 1; i < 10000; i++)
{
for (int j = 1; j < 10000; j++)
{
result += random.Next(0, 10) * Math.Sqrt(i) * Math.Sqrt(j) + Math.Abs(Math.Sqrt(i));
}
}
return result;
}
public static void Main()
{
Thread t = new Thread(new ThreadStart(Go));
t.Start();
for (int i = 0; i < 1; i++)
{
Process Proc = Process.GetCurrentProcess();
long AffinityMask = (long)Proc.ProcessorAffinity;
AffinityMask = 0x0004;//processor 3
Proc.ProcessorAffinity = (IntPtr)AffinityMask;
var result1 = DumbCountSqr(i);
Console.WriteLine("result1 = " + result1);
}
}
public static void Go()
{
for (int i = 0; i < 1; i++)
{
Process Proc = Process.GetCurrentProcess();
long AffinityMask = (long)Proc.ProcessorAffinity;
AffinityMask = 0x0001;//processor 1
Proc.ProcessorAffinity = (IntPtr)AffinityMask;
var result2 = DumbCountSqr(i);
Console.WriteLine("result2 = " + result2);
}
}
}
}
【问题讨论】:
-
您如何确定它们没有同时运行? “它不起作用”......它怎么不起作用?
标签: c# multithreading parallel-processing task-parallel-library