Несколько процессов получают доступ к общей памяти, блокируя ее с помощью мьютекса и pthread_mutex_lock()
для синхронизации, и каждый процесс может быть убит в любой момент (на самом деле я описал php-fpm
с расширением APC
, но это не имеет значения).
Будет ли разблокирована мьютекс автоматически, если процесс заблокировал мьютекс и затем был убит?
Или есть способ разблокировать его автоматически?Будет убит мьютекс процесса/потока релиза?
Редактировать: Как выяснилось, умирающие процессы и потоки имеют сходное поведение в этой ситуации, которое зависит от robust attribute of mutex.
Это зависит от типа используемого мьютекса, который вы не указали. Punch [надежный мьютекс] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_setrobust.html) в вашу любимую поисковую систему. –
См. [Этот связанный вопрос] (http://stackoverflow.com/questions/7348465/posix-thread-exit-crash-exception-crash-while-holding-mutex), и, как сказал Дэвид, посмотрите на надежные мьютексы. После сбоя они не разблокируются, но следующий поток, который попытается заблокировать его, получит код ошибки EOWNERDEAD. –
Было бы неплохо ответить на этот вопрос, но комментарий Дэвида, вероятно, слишком короткий, чтобы быть ответом как есть. –