блокировка разделяемой памяти и сбой процесса - PullRequest
0 голосов
/ 28 августа 2010

Я хочу попытаться лучше понять проблему синхронизации разделяемой памяти. Я понял, что межпроцессная синхронизация может работать по-разному в разных операционных системах. Наибольшее различие заключается в том, что происходит, когда процесс, который заблокировал общую память, вылетает. Windows освобождает блокировку с именем mutex после сбоя процесса, тогда как linux не освобождает его. Может кто-нибудь лучше объяснить мне проблему и каковы преимущества и недостатки? Как в Linux можно освободить именованный мьютекс или семафор между процессами после сбоя процесса? Я искал в интернете, но не нашел человека, который бы хорошо объяснил проблемы и решения.

Я надеюсь, что кто-нибудь может мне помочь. Извините за мой английский.

1 Ответ

1 голос
/ 28 августа 2010

Преимущество Windows в том, что ожидающий поток освобождается для продолжения. Недостатком является то, что он понятия не имеет, в каком состоянии находится общая память - сбойный процесс мог частично проходить через обновления. (Windows указывает на это ожиданием мьютекса, возвращающего WAIT_ABANDONED, а не WAIT_OBJECT_0 (или смещения от них при ожидании нескольких объектов).

На практике единственное безопасное, что можно сделать, - это каким-то образом сбросить общую память (при условии, что это можно сделать осмысленно) или выйти из строя.

...