Очистка ресурса при аварийном завершении процесса

Мой вопрос: когда процесс ненормально завершается (через сигнал это может быть SIGKILL, чтобы мы могли 'не перехватить его), есть ли гарантированный порядок или атомарность, в которой высвобождаются его ресурсы? В частности, меня интересуют блокировки файлов и общая память.

Например:

1) Если процесс удерживает блокировки на 2 файлах и ненормально завершает свою работу, возможно ли, чтобы другой процесс, пытающийся заблокировать те же файлы, увидел, что один файл заблокирован, а другой разблокирован? Или процесс освобождения файловых блокировок атомарен с точки зрения других процессов?

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

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

Однако здесь возникает тот же вопрос: если процесс, удерживающий блокировку файла и также сопоставленный с сегментом совместно используемой памяти, аварийно завершается, возможно ли, что после того, как совместно используемая память будет автоматически отключена, другие процессы все равно увидят блокировку файла как заблокированную? Или же отображение сегмента общей памяти и разблокировка файла являются атомарными с точки зрения других процессов?

Ответы на вопрос(2)

Ваш ответ на вопрос