pthread_rwlock между процессами: восстанавливать после сбоя? - PullRequest
1 голос
/ 05 июля 2011

Я работаю над Linux и использую pthread_rwlock, который хранится в общей памяти и совместно используется несколькими процессами.Это в основном работает нормально, но когда я убиваю процесс (SIGKILL), пока он удерживает блокировку, создается впечатление, что блокировка все еще удерживается (независимо от того, блокировка чтения или записи).

IsЕсть ли способ распознать такое состояние и, возможно, даже восстановить его?

Ответы [ 2 ]

1 голос
/ 14 октября 2014

@ cnicutar - этот «реальный ответ» довольно сомнителен. Задача ядра состоит в том, чтобы справиться с межпроцессными обязанностями по освобождению ресурсов и обеспечению того, чтобы все было помечено согласованно - пользовательское пространство не может эффективно выполнять эту работу, когда что-то идет не так.

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

1 голос
/ 05 июля 2011

Реальный ответ - найти достойный способ остановить процесс.Убить его с помощью SIGKILL - это , а не . Это достойный способ сделать это.

Эта функция указана для мьютексов , называемых устойчивостью (PTHREAD_MUTEX_ROBUST) но не для rwlocks .Стандарт не предоставляет этого, а kernel.org даже не имеет страницы о rwlocks.Итак, как я сказал:

  • Найдите другой способ остановить процесс (возможно, другой сигнал, который можно обработать?)
  • Снимите блокировку при выходе
...