Thread-Lock-Objekt, für die Synchronisierung von mehreren Threads verwendet.
Dieacquire()
Die Funktion wird verwendet, um ein Threadlock (Schließen) anzufordern.
Erwerben
Siehethreading.Lock()
Abschnitt für Beispiele.
Dieacquire()
Wenn ein Thread die Funktion "Thread Lock" anruft, wird die Funktion "Thread Lock" verwendet.acquire()
Wenn der Schloss nicht von einem anderen Thread gehalten wird, erhält der aufrufende Thread den Schloss erfolgreich und setzt die Ausführung fort. Wenn der Schloss bereits von einem anderen Thread gehalten wird, wird der aufrufende Threadacquire()
wird blockiert, bis das Schloss freigegeben ist.
Ich habe eine Frage. Ich habe eine Frage.
Dierelease()
Die Funktion wird verwendet, um ein Gewindeverriegelung (Entriegelung) zu lösen.
Freisetzung
function consumer(productionQuantity, dict, pLock, cLock) {
for (var i = 0; i < productionQuantity; i++) {
pLock.acquire()
cLock.acquire()
var arr = dict.get("array")
var count = arr.shift()
dict.set("array", arr)
Log("consumer:", count, ", array:", arr)
cLock.release()
Sleep(1000)
pLock.release()
}
}
function producer(productionQuantity, dict, pLock, cLock) {
for (var i = 0; i < productionQuantity; i++) {
cLock.acquire() // cLock.acquire() placed after pLock.acquire() will not cause deadlock
pLock.acquire()
var arr = dict.get("array")
arr.push(i)
dict.set("array", arr)
Log("producer:", i, ", array:", arr)
pLock.release()
Sleep(1000)
cLock.release()
}
}
function main() {
var dict = threading.Dict()
dict.set("array", [])
var pLock = threading.Lock()
var cLock = threading.Lock()
var productionQuantity = 10
var producerThread = threading.Thread(producer, productionQuantity, dict, pLock, cLock)
var consumerThread = threading.Thread(consumer, productionQuantity, dict, pLock, cLock)
consumerThread.join()
producerThread.join()
}
Prüfung von Stillstandsszenarien
Es ist zu beachten, dass eine unsachgemäße Verwendung von Fadenverschlüssen zu einer Sackgasse führen kann.
Ich bin nicht derjenige, der das Problem hat, aber ich bin derjenige, der es hat.
Faden ThreadEvent