@mIka01

Как запустить параллельно две функции?

Здравствуйте, у меня вопрос про параллельное вычисление (потоки).
Есть функция которая принимает массив и некоторые другие переменные. На выходе возвращает массив.
Мне нужно запустить несколько функций одновременно (желательно 4). Потом по завершении их работы продолжить выполнение основного алгоритма.
Вот возникла проблема. Все время вылитают ошибки или невозможно их синхронизировать. Помогите найти рабочий код, пожалуйста.

P.S. У меня ноутбук, 2 ядра.

Заранее благодарю за ответ.
  • Вопрос задан
  • 490 просмотров
Решения вопроса 2
@soloveid
Ну примерно вот так.
double[] arr1, arr2, arr3, arr4;
            var task1 = Task.Factory.StartNew(() =>
            {
                arr1 = new double[0];//вызов функции
            });

            var task2 = Task.Factory.StartNew(() =>
            {
                arr2 = new double[0];//вызов функции
            });
            var task3 = Task.Factory.StartNew(() =>
            {
                arr3 = new double[0];//вызов функции
            });
            var task4 = Task.Factory.StartNew(() =>
            {
                arr4 = new double[0];//вызов функции
            });
            Task.WaitAll(task1, task2, task3, task4);
Ответ написан
@mIka01 Автор вопроса
Есть еще один способ. (Он у меня сработал)
{
            int res=0, res1=0, res2=0, res3=0, res4=0;
            Thread t1 = new Thread(() => {res1 = Plus_2(2); });
            Thread t2 = new Thread(() => {res2 = Plus_2(3); });
            Thread t3 = new Thread(() => {res3 = Plus_2(4); });
            Thread t4 = new Thread(() => {res4 = Plus_2(5); });
 
            //Запускаем вычисление в четыре потока
            t1.Start(); t2.Start(); t3.Start();t4.Start();
 
            //Ожидаем завершение всех
            t1.Join(); t2.Join(); t3.Join(); t4.Join();
 
            res = res1 + res2 + res3 + res4;// Результат всех вычислений суммируем, в данном случае ответ будет 22
 
        }
 
        static int  Plus_2(int a)// метод вычисления
          { int b=2; return a + b;}

Вот мой код.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы