Несколько Thread, переменные - C#

Узнай цену своей работы

Формулировка задачи:

Доброе время суток! При запуске нескольких потоков переменные внутри

Calc()

изменяются из "соседних" потоков. Как иначе можно оформить данную задачу, чтобы избежать такого поведения ?
Листинг программы
  1. for (int i = 0; i < tds.Capacity; i++)
  2. {
  3. tds[i] = new Thread(delegate() { Calc(int x, int y); });
  4. tds[i].Start();
  5. }

Решение задачи: «Несколько Thread, переменные»

textual
Листинг программы
  1. using System.Threading.Tasks;
  2.  
  3. namespace CyberForum
  4. {
  5.     public class YourClass
  6.     {
  7.         private int x, y;
  8.        
  9.         public void Run()
  10.         {
  11.             int count = 10;
  12.             RunInternal(count);
  13.         }
  14.  
  15.         private void RunInternal(int count)
  16.         {
  17.             ParallelOptions options = new ParallelOptions
  18.             {
  19.                 MaxDegreeOfParallelism = 4
  20.             };
  21.            
  22.             Parallel.For(0, count, options, Calculate)
  23.         }
  24.  
  25.         // параметр index нужен только для соответствия сигнатуре вызова метода Parallel.For
  26.         // и больше ни на что не влияет
  27.         private int Calculate(int index)
  28.         {
  29.             int localX = x; int localY = y;
  30.            
  31.             Calc(localX, localY);
  32.         }
  33.        
  34.         private void Calc(int x, int y)
  35.         {
  36.             // do something with x and y
  37.         }
  38.     }
  39. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы