2010-08-28 28 views
0

Je veux essayer de mieux comprendre le problème de la synchronisation de la mémoire partagée. J'ai compris que la synchronisation interprocess peut fonctionner différemment sur différents systèmes d'exploitation. La plus grande différence est ce qui se passe lorsqu'un processus qui a bloqué la mémoire partagée se bloque. Windows libre verrouillé nommé mutex après un crash de processus alors que Linux ne le libère pas. Quelqu'un peut-il m'expliquer mieux le problème et quels sont les avantages et les inconvénients? Comment est-il possible sous Linux de libérer un mutex nommé ou un sémaphore interprocess après un crash de processus? J'ai cherché sur internet mais je n'ai pas trouvé quelqu'un qui explique bien les problèmes et les solutions.verrouillage de la mémoire partagée et plantage du processus

J'espère que quelqu'un peut m'aider. Désolé pour mon anglais.

Répondre

1

L'avantage de Windows est que le thread en attente est libéré pour continuer. L'inconvénient est qu'il n'a aucune idée de l'état de la mémoire partagée — le processus planté peut avoir été en partie à travers les mises à jour. (Windows indique ce par l'attente sur le mutex retour WAIT_ABANDONED plutôt que WAIT_OBJECT_0 (ou décalages de ceux-ci si l'attente sur plusieurs objets).

En pratique, la seule chose sûre à faire est de réinitialiser la mémoire partagée d'une certaine façon (en supposant cela peut être fait de façon significative) ou d'échouer