Die Ressourcen sind geladen. Beförderung...

ThreadBedingung

Bedingungsgegenstand, für die Synchronisierung von mehreren Threads verwendet.

Anzeigen

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}

Benachrichtigen Sie alle

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}

Warten Sie.

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}

zu erwerben

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}

Freisetzung

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