2

Pythons Semaphor unterstützt keine negativen Anfangswerte. Wie also mache ich einen Thread warten bis 8 andere Threads etwas getan haben? Wenn Semophore negative Anfangswerte unterstützt, könnte ich es einfach auf -8 setzen und jeden Thread den Wert um 1 erhöhen lassen, bis wir eine 0 haben, die den wartenden Thread freigibt.Python-Semaphore: Ich benötige einen negativen Anfangswert

Ich kann manuell einen globalen Zähler in einem kritischen Abschnitt erhöhen, dann eine bedingte Variable, aber ich möchte sehen, ob es andere Vorschläge gibt.

Antwort

3

Sicher ist es spät für eine Antwort, aber es kann jemand anderem nützlich sein.

Wenn Sie auf 8 verschiedene Threads warten möchten, um etwas zu tun, können Sie einfach 8 mal warten. Sie initialisieren eine Semaphore in 0 mit

s = threading.Semaphore(0)

und dann

for _ in range(8): 
    s.acquire() 

wird die Arbeit machen.

Verwandte Themen