Возможен ли одновременный доступ к одному ресурсу из нескольких потоков? - 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);

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

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

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