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