Einen Zähler threadsicher inkrementieren und zurückgeben
Verfasst: Sonntag 1. Juli 2007, 11:15
Hallo,
ich habe mal wieder eine recht allgemeine Frage, die ich für verschiedene Skripte/Programme benötige.
Es kommt hin und wieder vor, dass ich eine neue Instanz einer laufenden Nummer benötige. Ohne Threads geht das folgendermaßen problemlos:
Sobald aber mehrere Threads ins Spiel kommen, besteht die Gefahr, dass der bearbeitete Prozess zwischen Nummerholen und Nummerinkrementieren wechselt und die Nummer zwei mal geholt wird.
Ideal wäre es, wenn eine Funktion wie "i+=1" i um ein erhöhen und gleichzeitig den neuen Wert zurückgeben würde. Ansonsten fällt mir nur ein, dass man einen lock verwendet. Was passiert eigentlich, wenn mehrere Threads gleichzeitig auf dieselbe! Funktion zugreifen?
Ist mein Problem ein Standardfall der Informatik?
Grüße,
Michael
ich habe mal wieder eine recht allgemeine Frage, die ich für verschiedene Skripte/Programme benötige.
Es kommt hin und wieder vor, dass ich eine neue Instanz einer laufenden Nummer benötige. Ohne Threads geht das folgendermaßen problemlos:
Code: Alles auswählen
class Lnr:
iLaufendeNummer = 0
def next(self):
iNextId = Lnr.iLaufendeNummer
Lnr.iLaufendeNummer += 1
return iNextId
iNext = Lnr.next()
Ideal wäre es, wenn eine Funktion wie "i+=1" i um ein erhöhen und gleichzeitig den neuen Wert zurückgeben würde. Ansonsten fällt mir nur ein, dass man einen lock verwendet. Was passiert eigentlich, wenn mehrere Threads gleichzeitig auf dieselbe! Funktion zugreifen?
Ist mein Problem ein Standardfall der Informatik?
Grüße,
Michael