2011-07-05 3 views
1

Je travaille sur linux et j'utilise un pthread_rwlock, qui est stocké dans la mémoire partagée et partagé sur plusieurs processus. Cela fonctionne généralement bien, mais quand je tue un processus (SIGKILL) alors qu'il tient un verrou, il semble que le verrou soit toujours maintenu (qu'il s'agisse d'un verrou de lecture ou d'écriture).pthread_rwlock entre processus: réparer après un crash?

Est-il possible de reconnaître un tel état, et peut-être même réparer il?

Répondre

1

La vraie réponse est de trouver un moyen convenable d'arrêter un processus. Le tuer avec SIGKILL est pas une manière décente de le faire.

Cette fonctionnalité est spécifiée pour mutexes, robustesse appelé (PTHREAD_MUTEX_ROBUST) mais pas pour rwlocks. La norme ne le fournit pas et kernel.org n'a même pas de page sur rwlocks. Alors, comme je l'ai dit: (peut-être un autre signal qui peut être manipulé)

  • Trouver une autre façon d'arrêter le processus
  • Libérez le verrou lorsque vous quittez
+0

J'ai utilisé SIGKILL spécifiquement pour tester la robustesse de ma solution. – mooware

1

@cnicutar - que « réel répondre "est assez douteux. C'est le travail du noyau de gérer les responsabilités transversales de la libération des ressources et s'assurer que les choses sont marquées cohérentes - l'espace utilisateur ne peut pas faire le travail efficacement lorsque les choses tournent mal.

si tout le monde joue Attribuées bien les fonctionnalités robustes ne seront pas nécessaires, mais pour un système robuste que vous voulez vous assurer que le système ne va pas vers le bas de certains processus client buggy.

Questions connexes