Während Fragment X Code ausgeführt wird, sollte Fragment Y nicht ausgeführt werden und wenn Y ausgeführt wird X sollte nicht ausgeführt werden. Stattdessen sollten X und Y angehalten werden, wenn ein anderer gerade ausgeführt wird.Beschränken gleichzeitiger Prozesse mit beratenden Dateisperren
jedoch eine beliebige Anzahl von Prozessen oder Threads erlaubt gleichzeitig Code X.
Was mehr als eine Y Ausführung parallel ausführen? Es sollte auch angehalten werden, bis eine andere Instanz von Y ausgeführt wird oder mit dem Fehler "Mehr als ein Y kann nicht parallel ausgeführt werden" endet.
Kann dies mit Unix Advisory File Locks implementiert werden? Ich denke, ich sollte die Nummer des aktuell ausgeführten X in die Datei schreiben (ähnlich der Referenzzählung). Oder vielleicht brauche ich zwei Dateien: eine für die Speicherung der Anzahl gleichzeitiger Prozesse, die X ausführen, und die andere für die Sperrung der ersten? Versuchen wir nun, den Algorithmus zu konstruieren.
Beachten Sie, dass ich in Python schreibe.
Beachten Sie, dass X in meinem echtes Problem ist ein Code, der eine DB modifiziert, und Y ist die DB-Wiederherstellungsprozedur, die benötigt wird, wenn die Daten irgendwie inkonsistent sind – porton
Wenn es eine Y-Anfrage gibt Sind X-Anfragen erlaubt fortzufahren, oder werden sie gehalten, bis das Y verarbeitet wird? Gibt es noch andere Probleme beim Teilen/Verhungern (zu viele Y-Anfragen, die X-Anfragen verhindern)? Dies ist alles ziemlich Standard "Leser und Schriftsteller" gegenseitigen Ausschluss oder Sperrzeug - grundlegende Concurrency-Theorie. Es kann mit Advisory-Locking erfolgen, solange die Prozesse kooperieren. –
@ JonathanLeffler Was meinst du mit "ausstehend"? Wenn Y ausgeführt wird, müssen alle X warten. Brauche ich ein oder zwei Beratungsschlösser? – porton