Sumber dimuat naik... memuat...

ThreadCondition

Objek keadaan, digunakan untuk penyegerakan pelbagai benang.

maklumkan

Peraturannotify()fungsi digunakan untuk membangunkan thread menunggu (jika ada). Hanya thread yang telah dipanggilwait()Sistem akan terbangun.

maklumkan

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

Gunakannotify()fungsi untuk membangunkan benang menunggu.

Peraturannotify()fungsi membangunkan utas dalam barisan menunggu.

Apabilanotify()Fungsi membangunkan benang, benang akan mendapatkan semula kunci benang.

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

memberitahuSemua

PeraturannotifyAll()Fungsi membangunkan semua benang menunggu.

memberitahuSemua()

Sila rujukThreadCondition.notify()Bahagian untuk contoh.

PeraturannotifyAll()Fungsi membangkitkan semua benang menunggu satu demi satu, dan benang yang dibangkitkan mendapatkan semula kunci benang.

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

Tunggu.

Peraturanwait()Fungsi digunakan untuk membuat benang menunggu di bawah keadaan tertentu yang direka.

Tunggu.

Sila rujukThreadCondition.notify()Bahagian untuk contoh.

Peraturanwait()Fungsi melepaskan kunci benang dan mendapatkan semula kunci benang apabila bangun.

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

memperoleh

Peraturanacquire()fungsi digunakan untuk meminta kunci benang (kunci).

mendapatkan ((()

Sila rujukThreadCondition.notify()Bahagian untuk contoh.

Sebelum digunakanwait(), anda perlu meminta kunci benang (kunci) objek keadaan semasa.

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

Pembebasan

Peraturanrelease()fungsi digunakan untuk melepaskan kunci benang (membuka kunci).

Pembebasan ((()

Sila rujukThreadCondition.notify()Bahagian untuk contoh.

Selepas digunakanwait(), kita perlu melepaskan kunci benang (membuka kunci) objek keadaan semasa.

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

ThreadEvent ThreadDict