Wie gehen Sie mit Fehlern von pthread_mutex_unlock um?

8

Angenommen, ein Thread führt erfolgreich pthread_mutex_lock aus, ist es dennoch möglich, dass ein Aufruf von pthread_mutex_unlock in demselben Thread fehlschlägt? Wenn ja, kannst du tatsächlich etwas dagegen tun und den Thread abbrechen?

%Vor%

Von diese Seite sind mögliche Fehler für pthread_mutex_unlock() :

  

[EINVAL]       Der von mutex angegebene Wert bezieht sich nicht auf initialisiert   Mutex-Objekt.

Wenn die Sperre erfolgreich war, ist es unwahrscheinlich, dass dies fehlschlägt.

  

[EAGAIN]       Der Mutex konnte nicht erworben werden, da die maximale Anzahl von   rekursive Sperren für Mutex wurde überschritten.

Wirklich? Zum Entsperren?

  

Die Funktion pthread_mutex_unlock () kann fehlschlagen, wenn:

     

[EPERM]       Der aktuelle Thread besitzt den Mutex nicht.

Wenn die Sperre erfolgreich war, sollte dies auch nicht auftreten.

Also, meine Gedanken sind, wenn es eine erfolgreiche Sperre gibt, dann sollte in dieser Situation die Entsperrung niemals fehlschlagen, wodurch die Fehlerprüfung und der nachfolgende Handhabungscode sinnlos werden.

    
Dave Rager 14.09.2011, 20:04
quelle

2 Antworten

2

Von der Manpage für pthread_mutex_unlock:

%Vor%

Wenn Sie der Manpage glauben, scheint es, dass Ihr Fehlerfall nicht passieren kann.

    
dbeer 14.09.2011, 22:18
quelle
2

Bevor Sie "Sieg" schreien. Ich habe auf dieser Seite nach einem Grund gesucht, warum eines meiner Programme auf einem pthread_mutex_unlock (unter HP-UX, nicht Linux) fehlschlug.

%Vor% Das scheiterte an mir, nach vielen Millionen glücklichen Hinrichtungen. errno war EINTR , obwohl ich gerade jetzt herausgefunden habe, dass ich nicht errno, sondern eher den Rückgabewert prüfen soll. Aber trotzdem war der Rückgabewert NICHT 0. Und ich kann mathematisch beweisen, dass ich an dieser Stelle ein gültiges Schloss besitze.

Sagen wir einfach, Ihre Theorie steht unter Stress, obwohl mehr Forschung erforderlich ist; -)

    
geert3 30.09.2011 14:45
quelle

Tags und Links