Prozesse, Threads und einzelne Budgetinstanzen auseinanderhalten.
Ein Prozess ist eine laufende Programminstanz mit eigenem Speicher. Threads sind Arbeitsabläufe innerhalb eines Prozesses und können dasselbe Objekt verwenden. Deshalb beginnt eine Nebenläufigkeitsanalyse mit einer Zustandszeichnung: Welche Arbeiter sehen dieselbe Instanz, und welche besitzen getrennte Kopien? Eine threading.Lock schützt den vereinbarten Abschnitt der Threads, die tatsächlich dieselbe Sperre benutzen. Sie erzeugt keinen gemeinsamen Zähler in einem anderen Prozess. Auch die bloße Eltern-Kind-Beziehung zweier Arbeiter teilt kein Budget. Beschrifte jede Grenze mit ihrem Besitzer, bevor du aus einem Zahlenwert eine Gesamtgarantie ableitest.
Ein Beispiel
Ein Werkstattplaner besitzt ein Elternbudget von 3 und zwei eigenständige Helferbudgets von jeweils 2. Ohne Rückgaben können zusammen 7 Verbräuche gelingen. Sollen alle drei Arbeiter gemeinsam höchstens 3 verwenden, brauchen sie einen gemeinsam durchgesetzten Zähler. Drei getrennte Objekte mit jeweils 3 würden bis zu 9 erlauben.
Python 3.11 · Lehrbeispiel
limits = [3, 2, 2]
print(sum(limits)) # drei getrennte Instanzen, keine Rückgaben
Erwartete Ausgabe
7