Si un client meurt alors qu'il a réservé un serveur, on obtient une situation blocante. Il faut libérer le sémaphores à la place du défunt. On le fait en posant SEM0=0 avec la fonction shmzero() ou avec ipcstat.
Lors d'un reset automatique, il faut prendre garde au fait que si d'autres clients sont en attente sur le serveur bloqué, le premier de la queue sera libéré à l'instant même du reset du sémaphore et pourra travailler avec le serveur. Cette situation ne doit pas arriver, si par exemple le client défunt devait faire un action essentielle avant l'action du second client.
La fonction shmncnt() retourne le nombre de client en attente sur le serveur. Cela signifie que dans le cas où aucun client n'est en attente. Le reset peut s'opérer sans aucun risque. Si des clients sont en attente, il est souvent préférable de laisser un contrôle manuel à l'utilisateur. Par exemple:
write "Attention rupture de séquence" if shmncnt().gt.0 then write "Des clients sont en attente" write "Il faut remettre le système en état manuellement" else write "Il n'y a pas de client en attente" write "On fait un reset du sémaphore 0" shmstat=shmzero() endif erreur /set