Возможен ли одновременный доступ к одному ресурсу из нескольких потоков? - 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д