Also ich habe eigentlich gedacht, dass (sofern kein .join() benutzt wird) alle Threads gleichzeitig ablaufen, und sobald in einem Thread lockMe.acquire aufgerufen wird (Falls lockMe so definiert), pausieren alle anderen Threads bis zum lockMe.release.
Aber ist das wirklich richtig so? Ich habe mal folgenden Code ausprobiert:
Code: Alles auswählen
import threading
import time
class MyFred(threading.Thread):
def __init__(self, iD):
threading.Thread.__init__(self)
self.iD = iD
def run(self):
print("Starte ", self.iD)
lockMe.acquire()
print("Hier wird Gelockt")
time.sleep(self.iD * 4)
lockMe.release()
print("Beende ", self.iD)
lockMe = threading.Lock()
t1 = MyFred(1)
t2 = MyFred(2)
t1.start()
time.sleep(2)
t2.start()
time.sleep(2)
print("Beende Main Fred")
Starte 1
Hier wird Gelockt
Starte 2
Beende 1
Hier wird Gelockt
Beende Main Fred
Beende 2
Wie kann das sein? Ich habe extra im Mainthread noch 2 Sekunden gewartet, und dennoch erscheint "Beende 2" erst nachdem der Mainthread durch ist. Daraus schließe ich, dass der Mainthread schon während dem Lock weitergelaufen ist... Also stimmt irgendwas in meinem allgemeinen Verständnis von Locke nicht. Wäre nett wenn mich jemand aufklärt!
PS: Bin noch blutiger Anfänger, also wenns geht nicht in übermäßiger Fachsprache