Возможен ли одновременный доступ к одному ресурсу из нескольких потоков? - C#

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

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

Возможен ли одновременный доступ к одному ресурсу из нескольких потоков? Допустим, есть целочисленный неотсортированный массив на

10 000 000

элементов, требуется вычислить их сумму(плевать на переполнение). 1)Можно сделать это в один поток, но будет достаточно долго. 2)Можно сделать это в два потока, (один поток считает с 0 элемента до 5 000 000, а второй с 5 000 000 до 10 000 000) с учетом того, что средства синхронизации не используются, потоки будут одновременно получать доступ к массиву и переменной(в которой хранится результат), или они будут мешать друг другу и получится медленно? В чем основное отличие между потоком и асинхронной операцией?

Не по теме:

многопоточность туго идет

Решение задачи: «Возможен ли одновременный доступ к одному ресурсу из нескольких потоков?»

textual
Листинг программы
    var arr = Enumerable.Repeat(1, 100000000).ToArray();
    var parts = Partitioner.Create(0, arr.Length, arr.Length / 2);
    var sum = 0;
    Parallel.ForEach(parts, p =>
    {
        int partSum = 0;
        for (int i = p.Item1; i < p.Item2; i++)
        {
             partSum += arr[i];
        }
        Interlocked.Add(ref sum, partSum);
    });
    Console.WriteLine(sum);

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


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

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

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