Objet de condition, utilisé pour la synchronisation multi-thread.
Lenotify()
fonction est utilisée pour réveiller un fil d'attente (le cas échéant).wait()
La méthode sera réveillée.
Il faut le signaler.
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)
}
}
Utilisez lenotify()
fonction pour réveiller le fil d'attente.
Lenotify()
fonction réveille un fil dans la file d'attente.
Lorsque lenotify()
fonction réveille un fil, le fil récupérera le verrou de fil.
{@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquérir acquérir}, {@fun/Threads/ThreadCondition/release release}
LenotifyAll()
la fonction réveille tous les threads en attente.
Je vous préviens.
Veuillez vous référer auThreadCondition.notify()
section pour les exemples.
LenotifyAll()
fonction réveille tous les fils en attente un par un, et les fils réveillés reprennent le verrou de fil.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquérir acquérir}, {@fun/Threads/ThreadCondition/release release}
Lewait()
La fonction est utilisée pour faire attendre un fil dans certaines conditions de conception.
Attends!
Veuillez vous référer auThreadCondition.notify()
section pour les exemples.
Lewait()
La fonction relâche le verrouillage du fil et récupère le verrouillage du fil lorsqu'il est réveillé.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/acquérir acquérir}, {@fun/Threads/ThreadCondition/release release}
Leacquire()
la fonction est utilisée pour demander un verrouillage de fil.
acquérir
Veuillez vous référer auThreadCondition.notify()
section pour les exemples.
Avant utilisationwait()
, vous devez demander le verrouillage de thread (verrouillage) de l'objet condition actuel.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/release release}
Lerelease()
fonction est utilisée pour libérer un verrou de fil (déverrouiller).
libération
Veuillez vous référer auThreadCondition.notify()
section pour les exemples.
Après utilisationwait()
, nous avons besoin de libérer le verrouillage de fil (déverrouiller) de l'objet condition actuelle.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquérir acquérir}
ThreadÉvénement ThreadDict