Pthread mutex
-
Hallo,
ich benutze momentan in einem C++ Projekt die Pthreads und bin gerade damit beschäftigt die verschiedenen Threads zu synchronisieren.
Jetzt hab ich natürlich wiederholt die Situation, dass Deadlocks auftreten.
Nun bin ich mir nicht so ganz klar darüber wie die Mutexe in den Pthreads funktionieren. Es heisst immer nur, dass ein Thread der einen bereits gelockten Mutex locken will, solange warten muss, bis dieser wieder vom besitzenden Thread freigegeben wurde. Wird der wartende Thread beim freigeben das Mutexes automatisch aufgeweckt oder muss dies explizit durchgeführt werden?
Eine Methode ähnlich der Notify Methode der Java Threads gibt es ja nicht. Nur eine pthread_cond_signal welche allerdings nur im Zusammenhang mit den Conditions funktioniert.
Gruß Matthias
-
Da bist Du hier im falschen Unterforum.
Korrekt wäre wohl Rund um die Programmierung oder C++.
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Wenn dich bissi mit BS internas beschaeftigst, kommst mit der Zeit drauf, das es eigentlich nur eine Antwort auf deine Frage geben kann: Automatisch !
Das BS weiss am besten, wie man threads schlafen legt, und mit dem wissen, welcher thread welchen Lock grad haelt, kann es sogar draus ableiten, wenn es sich lohnt nachzuschauen, ob der gelockte thread weiter machen koennte oder nicht. Das BS kann das meistens also viel besser haendeln wie du selbst.
DU haettest also schon nen Problem, eine effektive aufweckroutine zu schreiben ...
Also sieh den Mutex nur als Blocker in deinem Programmablauf an. Wenn der Lock aufgehoben wird, wird dein thread automatisch weiter ausgefuehrt. Manuell musst da gar nix machen.
Wie intern das BS das loest, darf dich gar nicht intressieren. Es nimmt das was es am besten kann ... vielleicht Signale, vielleicht Spinlocks mit gleichzeitiger aenderung der Prozessprio des threads, vielleicht irgendwas ...Ciao ...