Определение четности чисел в большом объеме данных, используя 10 потоков - C#

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

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

Как такое можно решить? Мозги кипят, вижу что при помощи Мютекса, но как? есть список типа int размером допустим 1000000 из произвольных чисел. При нажатии на кнопку ты должен запустить 10 потоков и дождаться их завершения. Каждый из потоков должен забрать себе одно число из списка и проверить четное оно или нет. если четное, увеличить общий счетчик. В итоге мы просто посчитаем количество четных чисел в списке с помощью нескольких потоков. используя Task и BlockingCollection. Помогите пожалуйста

Решение задачи: «Определение четности чисел в большом объеме данных, используя 10 потоков»

textual
Листинг программы
class Program
{
    static int[] arr = new int[100000];
    static int counter = 0;
 
    static void Main()
    {
        var r = new Random();
        for (int i = 0; i < arr.Length; i++)
            arr[i] = r.Next();
 
        var queue = new BlockingCollection<int>(new ConcurrentQueue<int>(arr));
        queue.CompleteAdding();
 
        var tasks = new Task[10];
        for (int i = 0; i < tasks.Length; i++)
            tasks[i] = Task.Factory.StartNew(ProcessQueue, queue);
        Task.WaitAll(tasks);
        Console.WriteLine(counter);
    }
 
    static void ProcessQueue(object arg)
    {
        var queue = arg as BlockingCollection<int>;
        foreach (var value in queue.GetConsumingEnumerable())
            if (value % 2 == 0)
                Interlocked.Increment(ref counter);
    }
}

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


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

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

5   голосов , оценка 4 из 5
Похожие ответы