Bedingungsgegenstand, für die Synchronisierung von mehreren Threads verwendet.
Dienotify()
Funktion wird verwendet, um einen wartenden Thread (falls vorhanden) aufzuwecken.wait()
Die Methode wird aufgewacht.
Anmeldung
function consumer(dict, condition) {
while (true) {
condition.acquire()
while (dict.get("array").length == 0) {
Log(threading.currentThread().name(), "wait()...", ", array:", dict.get("array"))
condition.wait()
}
var arr = dict.get("array")
var num = arr.shift()
Log(threading.currentThread().name(), ", num:", num, ", array:", arr, "#FF0000")
dict.set("array", arr)
Sleep(1000)
condition.release()
}
}
function main() {
var condition = threading.Condition()
var dict = threading.Dict()
dict.set("array", [])
var t1 = threading.Thread(consumer, dict, condition)
var t2 = threading.Thread(consumer, dict, condition)
var t3 = threading.Thread(consumer, dict, condition)
Sleep(1000)
var i = 0
while (true) {
condition.acquire()
var msg = ""
var arr = dict.get("array")
var randomNum = Math.floor(Math.random() * 5) + 1
if (arr.length >= 3) {
condition.notifyAll()
msg = "notifyAll"
} else {
arr.push(i)
dict.set("array", arr)
if (randomNum > 3 && arr.length > 0) {
condition.notify()
msg = "notify"
} else {
msg = "pass"
}
i++
}
Log(_D(), "randomNum:", randomNum, ", array:", arr, ", msg:", msg)
condition.release()
Sleep(1000)
}
}
Verwendennotify()
Funktion, um den wartenden Faden zu wecken.
Dienotify()
Funktion weckt einen Thread in der Warteschlange.
Wenn dienotify()
Wenn eine Funktion einen Thread weckt, erhält der Thread das Thread-Lock zurück.
{@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}
DienotifyAll()
Funktion weckt alle wartenden Threads auf.
Benachrichtigen Sie alle.
SieheThreadCondition.notify()
Abschnitt für Beispiele.
DienotifyAll()
Die Funktion weckt alle wartenden Threads einzeln auf, und die erwachten Threads erwerben das Threadlock wieder.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}
Diewait()
Die Funktion wird verwendet, um einen Faden unter bestimmten Bedingungen warten zu lassen.
Warten Sie.
SieheThreadCondition.notify()
Abschnitt für Beispiele.
Diewait()
Die Funktion entlässt die Schraube und erhält die Schraube wieder, wenn man aufwacht.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}
Dieacquire()
Die Funktion wird verwendet, um ein Threadlock (Schließen) anzufordern.
Erwerben
SieheThreadCondition.notify()
Abschnitt für Beispiele.
Vor Gebrauchwait()
, müssen Sie das Thread-Lock (Lock) des aktuellen Condition-Objekts anfordern.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/release release}
Dierelease()
Die Funktion wird verwendet, um ein Gewindeverriegelung (Entriegelung) zu lösen.
Freisetzung
SieheThreadCondition.notify()
Abschnitt für Beispiele.
Nach Gebrauchwait()
, müssen wir das Thread-Lock (Unlock) des aktuellen Condition-Objekts freigeben.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}
ThreadEvent ThreadDict