Выполнить 2 разные функции одновременно, является ли мой ответ pthread? - PullRequest
0 голосов
/ 31 марта 2011

У меня есть массив фиксированного размера (пример: struct bucket[DATASIZE]), где в самом начале я загружаю информацию из файла.Поскольку меня беспокоит масштабируемость и время выполнения, динамический массив не использовался.

Каждый раз, когда я обрабатываю половину массива, я свободен заменять эти места большим количеством данных из файла.У меня нет четкого представления о том, как я это сделаю, но я подумал о pthreads для запуска двух параллельных задач: одна будет реальной обработкой данных, а другая обязательно заполнит массив.

Однако все примеры, которые я видел на pthreads, показывают, что все они работают над одной и той же задачей, но одновременно.Есть ли способ заставить их делать разные вещи?Есть идеи, мысли?

Ответы [ 3 ]

2 голосов
/ 31 марта 2011

У вас могут быть темы, выполняющие разные задачи. Шаблон, который вам нужен, очень распространен - ​​он называется соглашением производитель-потребитель.

0 голосов
/ 31 марта 2011

Да, это отличное применение для pthreads: это одна из тех вещей, для которых была создана pthreads.

Вы можете подумать о fork () дважды, один раз, чтобы создать процесс для манипулирования данными;а затем второй fork () для создания процесса, который заполняет пробелы.Используйте мьютекс, чтобы каждый процесс мог защитить массив от другого, и он будет работать нормально.

Зачем вашему массиву нужен мьютекс?Как бы вы это настроили?Когда каждый процесс должен получить мьютекс, а когда он должен освободить мьютекс?

- Пит

0 голосов
/ 31 марта 2011

То, что вы пытаетесь сделать, кажется очень похожим на стандартную параллельную программу, называемую производителем-потребителем (посмотрите, вы наверняка найдете пример в pthreads).Эта программа имеет один буфер фиксированного размера, который обрабатывается потребителем и заполняется производителем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...