Sumber dimuat naik... memuat...

ThreadCondition

Objek bersyarat untuk sinkronisasi pelbagai benang.

maklumkan



notify()

```javascript
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)
    }
}

Penggunaannotify()Fungsi ini akan membangkitkan benang yang sedang menunggu.

notify()Fungsi ini akan membangkitkan satu utas dalam barisan yang sedang menunggu.

notify()Apabila fungsi itu membangkitkan satu utas, utas itu akan mendapatkan semula kunci utas.

{@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}

memberitahuSemua

notifyAll()Fungsi ini akan membangkitkan semua utas yang sedang menunggu.

memberitahuSemua()

Contoh yang boleh digunakanThreadCondition.notify()Kandungan artikel.

notifyAll()Fungsi ini akan membangkitkan semua utas yang sedang menunggu secara berturut-turut, dan utas yang dibangkitkan akan mendapatkan semula kunci utas.

{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}

Tunggu.

wait()Fungsi ini digunakan untuk membuat benang menunggu di bawah keadaan reka bentuk tertentu.

Tunggu.

Contoh yang boleh digunakanThreadCondition.notify()Kandungan artikel.

wait()Fungsi ini akan melepaskan kunci benang dan mendapatkan semula kunci benang apabila ia dijaga.

{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}

memperoleh

acquire()Fungsi ini digunakan untuk meminta kunci (add-lock) pada satu benang.

mendapatkan ((()

Contoh yang boleh digunakanThreadCondition.notify()Kandungan artikel.

Dalam penggunaanwait()Sebelum ini, permintaan untuk mengunci butang syarat semasa diperlukan.

{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/release release}

Pembebasan

release()Fungsi ini digunakan untuk melepaskan kunci thread.

Pembebasan ((()

Contoh yang boleh digunakanThreadCondition.notify()Kandungan artikel.

Dalam penggunaanwait()Selepas itu, anda perlu melepaskan kunci benang objek syarat semasa.

{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}

ThreadEvent ThreadDict