Welche Ausgabe haben Sie erwartet? Die Ausgabe sieht für mich in Ordnung aus: eine Permutation von range(10)
. Die Reihenfolge, in der die Prozesse ausgeführt werden, kann von Durchlauf zu Durchlauf variieren. Das ist zu erwarten.
Ich vermute, dass Sie nicht verstehen, was ein Sperrschloss macht. Wenn Sie ein Sperrschloss erwerben, wird jeder andere Prozess, der versucht, dasselbe Schloss zu erwerben, blockiert, bis das Sperrschloss freigegeben wird. Das ist alles. In Ihrem Testlauf hat Prozess 0 zufällig als Erster das Schloss erworben. Jegliche anderen Prozesse, die versuchen, das Schloss zu erwerben, werden blockiert, bis Prozess 0 das Schloss freigibt. Prozess 0 druckt 0
und gibt dann das Sperrschloss frei. Dann hat es sich so ergeben, dass Prozess 1 das Schloss erworben hat. usw.
Kommentieren Sie Ihr l.release()
aus, und Sie werden feststellen, dass Ihr Programm nie beendet wird: der erste Prozess, der das Sperrschloss zufällig erwirbt, druckt dann seine ganze Zahl, und alle anderen Prozesse sind für immer blockiert, während sie darauf warten, das Sperrschloss zu erwerben.