Я пытаюсь использовать threading для получения списка простых чисел. Однако, когда я запускаю программу, я получаю избыточные простые числа в результате.Получение неожиданного многопоточного поведения
static void Main(string[] args)
{
try
{
var r2 = DoThread();
Array.Sort(r2);
}
catch (Exception e)
{ }
}
public static int[] DoThread()
{
var task = new List<MyThread>(){
new MyThread(){start = 3, end = 25000},
new MyThread(){start = 25001, end = 50000},
new MyThread(){start = 50001, end = 75000},
new MyThread(){start = 75001, end = 100000-3}
};
var threads = new List<Thread>()
{
new Thread(task[0].MyDelegate),
new Thread(task[1].MyDelegate),
new Thread(task[2].MyDelegate),
new Thread(task[3].MyDelegate)
};
threads.ForEach(t => { t.Start(); });
threads.ForEach(t => { t.Join(); });
var res = new List<int>();
task.ForEach(t => res.AddRange(t.result));
return res.ToArray();
}
public class MyThread
{
public int[] result;
public int start;
public int end;
public void MyDelegate()
{
IEnumerable<int> numbers = Enumerable.Range(start, end);
var parallelQuery =
from n in numbers
where Enumerable.Range(2, (int)Math.Sqrt(n)).All(i => n % i > 0)
select n;
result = parallelQuery.ToArray();
}
}
Что вы подразумеваете под «избыточным простым номером»? –
Вы имеете в виду DUPLICATE простые числа? – Polyfun
Я получаю такие же простые числа, как, например, 11, два раза в конечном массиве результатов после слияния всех четырех как. ,,, 11,11,13,17,19,19,23 ... –