Threadverarbeitung und Mutex

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Threadverarbeitung und Mutex

Beitrag von Sicro »

NicTheQuick hat geschrieben:Was man auch wissen muss: Ein einzelner Thread kann einen Mutex mehr als nur einmal sperren (Reentrantlock). Um ihn wieder entsperren zu können, muss er genau so oft entsperrt werden wie er auch gesperrt wurde.
Interessant! Das wusste ich noch nicht.
Ich habe hier mal kurz ein Code geschrieben, der das testet:

Code: Alles auswählen

Global Mutex = CreateMutex()

Procedure Thread1(param)
  Repeat
    LockMutex(Mutex)
    LockMutex(Mutex)
    Debug "Thread1"
    UnlockMutex(Mutex)
    UnlockMutex(Mutex) ; <= Nach der 1. Code-Ausführung auskommentieren
    Delay(20)
  ForEver
EndProcedure

Procedure Thread2(param)
  Repeat
    LockMutex(Mutex)
    Debug "Thread2"
    UnlockMutex(Mutex)
    Delay(10)
  ForEver
EndProcedure

CreateThread(@Thread1(), 0)
CreateThread(@Thread2(), 0)
Delay(200)
NicTheQuick hat geschrieben:Warum ist das sinnvoll? Man muss sich so um weniger kümmern. Beispiel: Ich habe mehrere Procedures, die auf den selben Daten arbeiten und dafür am Anfang der Procedure den Mutex sperren und am Ende wieder entsperren. Wenn man jetzt innerhalb einer Procedure eine andere Procedure aufruft, die ebenfalls den Mutex sperrt, dann kommt es nicht zum Stillstand des Programms.
Dein Beispiel begründet für mich nicht, warum ein Mutex ein Stack* Zähler hat. LockMutex() könnte auch einfach nicht blockieren, weil der Thread den Mutex ja bereits "besitzt" und nicht nochmal "in Besitz" nehmen muss. Die Procedure, die von der Thread-Procedure aufgerufen wird, läuft ja im selbem Thread.
Es wäre super, wenn mir das noch jemand erklärt.

(*) Es gibt leider kein Durchstreichen /:->
Zuletzt geändert von Sicro am 19.11.2018 22:47, insgesamt 1-mal geändert.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Re: Threadverarbeitung und Mutex

Beitrag von #NULL »

Weil er ja wissen muss, beim wievielten UnlockMutex() er auch tatsächlich wieder freigeben soll.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Threadverarbeitung und Mutex

Beitrag von Sicro »

@#NULL:
Danke, jetzt hat es "Klick" gemacht :allright:
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Antworten