Объект условий, используемый для многопоточной синхронизации.
Вnotify()
Функция используется для пробуждения ожидающего потока (если таковой имеется).wait()
Метод будет пробужден.
Уведомлять
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)
}
}
Используйтеnotify()
Функция пробуждает ждущую нить.
Вnotify()
функция просыпается нить в очереди ожидания.
Когдаnotify()
Функция пробуждает нить, нить восстановит блокировку нитки.
{@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}
ВnotifyAll()
Функция пробуждает все ожидающие нитки.
Уведомить все ((()
Пожалуйста, обратитесь кThreadCondition.notify()
Раздел для примеров.
ВnotifyAll()
Функция пробуждает все ожидающие нитки по одному, и пробужденные нитки восстанавливают блокировку нитки.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}
Вwait()
Функция используется, чтобы заставить нить ждать в определенных условиях.
Подождите.
Пожалуйста, обратитесь кThreadCondition.notify()
Раздел для примеров.
Вwait()
Функция освобождает замок нити и восстанавливает замок нити при пробуждении.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}
Вacquire()
Функция используется для запроса блокировки нити (блокировки).
приобретать
Пожалуйста, обратитесь кThreadCondition.notify()
Раздел для примеров.
Перед применениемwait()
, вам нужно запросить блокировку потока (блокировку) текущего объекта состояния.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/release release}
Вrelease()
Функция используется для освобождения блокировки нити (отключения).
освобождение))
Пожалуйста, обратитесь кThreadCondition.notify()
Раздел для примеров.
После примененияwait()
, мы должны освободить замок нитки (разблокировать) объекта текущего состояния.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}
Ведущий ThreadDict