Das Threading-Modul in Python bietet zwei Arten von Sperren: Eine gemeinsame Sperre und eine Reentrant-Sperre. Es scheint mir, wenn ich ein Schloss brauche, sollte ich immer den RLock über das Lock ziehen; hauptsächlich um Deadlock-Situationen zu vermeiden.Ist RLock ein vernünftiger Standard gegenüber Lock?
Außerdem sehe ich zwei Punkte, wenn eine Sperre über einen RLOCK bevorzugen:
- RLOCK eine kompliziertere innere Struktur hat und somit eine schlechtere Leistung haben kann.
- Aus irgendeinem Grund möchte ich verhindern, dass ein Thread durch die Sperre rekursiv wird.
Ist meine Argumentation richtig? Kannst du auf andere Aspekte hinweisen?
# 2 ist wahrscheinlich kein guter Grund; Der einzige Fall, bei dem es sich nicht um einen garantierten Deadlock handelt, ist, wenn die Rekursion nicht blockierend wird und eine vernünftige Vorgehensweise hat, wenn sie nicht verifizieren kann, dass sie die Sperre hält. Und # 1 gilt nicht für Python 3.2+. Ein legitimer Grund, "Lock" vorzuziehen, ist, wenn die Sperre in einem anderen Thread als dem, der sie erworben hat, freigegeben werden muss. – ShadowRanger