c / c ++ присоединяющиеся процессы? - PullRequest
1 голос
/ 27 ноября 2011

Я новичок в потоках и процессах.

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

Ответы [ 2 ]

2 голосов
/ 27 ноября 2011

Различные процессы могут общаться и обмениваться данными через общую память. На Linux вы можете посмотреть:

man shm_overview

для подключения сегмента памяти к нескольким процессам

и

man sem_overview для библиотеки семафоров для управления параллельным доступом.

0 голосов
/ 27 ноября 2011

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

Чтобы избежать ненужной блокировки, которая может снизить производительность, старайтесь не держать семафор слишком долго.Когда вы читаете глобальный объект, быстро сделайте его копию в процессе и используйте его, а не удерживайте семафор в течение всего времени, когда вы используете его значение.Аналогичным образом, при изменении глобального объекта, подготовьте свои изменения заранее (перед тем, как захватить семафор) и, как только у вас появится семафор, скопируйте их сразу.Иногда ваша работа зависит от чтения и написания глобального без изменения между чтением и написанием.В этом случае некоторая блокировка может быть неизбежной.

Непонятно, на какой платформе вы находитесь, но все основные платформы для ПК и серверов (Windows, Linux / Unix / Mac OS) поддерживают совместную память и семафоры.,API-интерфейсы могут быть разными, но необходимые вам функции есть.

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