Это зависит от типа блокировки, о которой вы говорите.
Если вы говорите о каких-либо внутренних блокировках ядра, они будут сняты соответствующим образом (в противном случае ваша система вскоре может аварийно завершить работу). Как правило, блокировки такого типа принадлежат не самому процессу, а некоторым внутренним рабочим процессам ядра и обычно не остаются заблокированными после того, как процесс все равно возвращается в пользовательское пространство.
Обратите внимание, однако, что если ядро уже заблокировано при выполнении команды kill, скорее всего, процесс не будет уничтожен. Завершение процесса выполняется как часть пути обработки сигнала, который вызывается из кода перехода возврата из ядра в пользовательское пространство. Если процесс ожидает спин-блокировки ядра, вы никогда не доберетесь до кода возврата, поэтому процесс не завершится.
Кроме того, если процесс завершается из-за OOPS ядра, все ставки отключены - ядро уже находится в несогласованном состоянии, и код выхода OOPS не очень старается очистить любые блокировки потока ядра. возможно, держал в то время.
Если вы говорите о любом виде спин-блокировки или семафора в пользовательском пространстве (включая семафоры IPC sem_*
), то нет, они не будут выпущены, так как нет концепции владения блокировкой с семафором.
Если вы говорите о семействе файловых блокировок flock
или консультативных блокировках fcntl(F_SETLK, ...)
, они будут автоматически разблокированы, когда любая дескриптор файла, связанный с файлом в этом процессе, закрыт. Из-за этого flock
является плохой идеей для использования в большинстве случаев, но да, он будет освобожден, если процесс будет убит.
Если вы говорите о локальном процессе pthread_mutex
, это спорный вопрос, потому что мьютекс перестанет существовать вместе с процессом.
Если вы говорите о разделяемом pthread_mutex
в сегменте совместно используемой памяти (в котором pthread_mutexattr_setpshared
был использован для обеспечения общего доступа), он будет автоматически освобожден, только если он также помечен как надежный мьютекс, с pthread_mutexattr_setrobust
- но он должен быть помечен как непротиворечивый перед повторным использованием; Подробнее см. справочную страницу pthread_mutex_consistent
.