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