2014-09-29 5 views
9

Несколько процессов получают доступ к общей памяти, блокируя ее с помощью мьютекса и pthread_mutex_lock() для синхронизации, и каждый процесс может быть убит в любой момент (на самом деле я описал php-fpm с расширением APC, но это не имеет значения).
Будет ли разблокирована мьютекс автоматически, если процесс заблокировал мьютекс и затем был убит?
Или есть способ разблокировать его автоматически?Будет убит мьютекс процесса/потока релиза?

Редактировать: Как выяснилось, умирающие процессы и потоки имеют сходное поведение в этой ситуации, которое зависит от robust attribute of mutex.

+4

Это зависит от типа используемого мьютекса, который вы не указали. Punch [надежный мьютекс] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_setrobust.html) в вашу любимую поисковую систему. –

+2

См. [Этот связанный вопрос] (http://stackoverflow.com/questions/7348465/posix-thread-exit-crash-exception-crash-while-holding-mutex), и, как сказал Дэвид, посмотрите на надежные мьютексы. После сбоя они не разблокируются, но следующий поток, который попытается заблокировать его, получит код ошибки EOWNERDEAD. –

+0

Было бы неплохо ответить на этот вопрос, но комментарий Дэвида, вероятно, слишком короткий, чтобы быть ответом как есть. –

ответ

1

Это зависит от типа мьютекса. «Прочный» мьютекс переживет смерть потока/процесса. Смотрите этот вопрос: POSIX thread exit/crash/exception-crash while holding mutex

Следующей нить, которая будет пытаться заблокировать его получит код EOWNERDEAD об ошибке

Примечания: Собранная информации из комментариев.

 Смежные вопросы

  • Нет связанных вопросов^_^