Как - суммировать матричные элементы, используя блокировку файла (unix - C/C++)

У меня есть M[nxn] матрица и должны вычислить сумму элементов в точке [n, n] с учетом следующих критериев:
- случайным образом выбрать строку или столбец;
-суммите его элементы в последнем элементе этой строки или столбца и установите другие элементы в 0;

Теперь проблема в том, что мне нужно заблокировать каждую строку или столбец, с которыми я работаю, потому что мне нужно сделать эту сумму, используя более одного процесса. Как я мог решить это?
Я знаю, что я должен использовать fcntl() и некоторые другие вещи, которые принадлежат ему, но мне интересен метод решения этого вопроса.
(Спасибо за совет!)

1 ответ

Решение

На самом деле вам не нужно блокировать матрицу (если она не в файле). Если это в файле, я бы сначала загрузил матрицу в память, а затем вам не нужна блокировка. Рассмотрим этот вариант:

Если у вас есть матрица nxm, попросите родительский процесс отключить m дочерних процессов и дождаться дочерних процессов.

В каждом дочернем процессе каждый из них должен взять каждый из m рядов.

Пусть каждый дочерний процесс складывает каждую строку, устанавливает значения в 0 и помещает сумму в последний столбец.

Завершите каждый дочерний процесс.

Когда все будет сделано, ваш родительский процесс суммирует n-ую строку столбца.

Поскольку все дочерние процессы будут работать с собственным набором данных, им не нужно будет блокировать какую-либо часть матрицы, поскольку мы никогда не будем обращаться к одной и той же области памяти.

Другие вопросы по тегам