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?
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.
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.
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; -)
Tags und Links pthreads