Если я инициализирую мьютекс перед созданием дочерних процессов, все ли дети будут соблюдать мьютекс? - PullRequest
0 голосов
/ 02 декабря 2011

Я немного покопался, и ближайший прямой ответ на мой вопрос - здесь .

Я создал мьютекс, затем превратился в цикл, где я прослушиваю активность на порте TCP / IP, разветвляюсь, отвечаю, затем выхожу из дочернего процесса. Часть «ответа» требует, чтобы дочерний процесс имел доступ к оборудованию автономно, который защищен мьютексом.

Если я инициализирую мьютекс перед созданием дочерних процессов, будут ли все потенциально запущенные дочерние элементы соблюдать мьютекс?

1 Ответ

2 голосов
/ 02 декабря 2011

Не по умолчанию.

Вы должны сохранить мьютекс в блоке общей памяти.Вы можете получить один с SysV IPC или с флагом MAP_SHARED на mmap().

Вы также должны правильно установить атрибуты мьютекса.Вам нужно создать атрибут mutex с pthread_mutexattr_init() и вызвать pthread_mutexattr_setpshared(), затем передать этот атрибут pthread_mutex_init().

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

...