Объект блокировки потока, используемый для многопоточной синхронизации.
Вacquire()
Функция используется для запроса блокировки нити (блокировки).
приобретать
Пожалуйста, обратитесь кthreading.Lock()
Раздел для примеров.
Вacquire()
Функция используется для запроса блокировки потока.acquire()
Функция объекта блокировки потока, он пытается получить блокировку. Если блокировка в настоящее время не проводится другой потоком, вызовущая потока успешно приобретает блокировку и продолжает выполнение. Если блокировка уже проводится другой потоком, вызовущая потокаacquire()
будет блокироваться до тех пор, пока замок не будет освобожден.
{@fun/Threads/threading/Lock Lock}, {@fun/Threads/ThreadLock/release release}
Вrelease()
Функция используется для освобождения блокировки нити (отключения).
освобождение))
function consumer(productionQuantity, dict, pLock, cLock) {
for (var i = 0; i < productionQuantity; i++) {
pLock.acquire()
cLock.acquire()
var arr = dict.get("array")
var count = arr.shift()
dict.set("array", arr)
Log("consumer:", count, ", array:", arr)
cLock.release()
Sleep(1000)
pLock.release()
}
}
function producer(productionQuantity, dict, pLock, cLock) {
for (var i = 0; i < productionQuantity; i++) {
cLock.acquire() // cLock.acquire() placed after pLock.acquire() will not cause deadlock
pLock.acquire()
var arr = dict.get("array")
arr.push(i)
dict.set("array", arr)
Log("producer:", i, ", array:", arr)
pLock.release()
Sleep(1000)
cLock.release()
}
}
function main() {
var dict = threading.Dict()
dict.set("array", [])
var pLock = threading.Lock()
var cLock = threading.Lock()
var productionQuantity = 10
var producerThread = threading.Thread(producer, productionQuantity, dict, pLock, cLock)
var consumerThread = threading.Thread(consumer, productionQuantity, dict, pLock, cLock)
consumerThread.join()
producerThread.join()
}
Испытание сценариев тупика
Следует отметить, что неправильное использование резьбовых замков может привести к тупику.
{@fun/Threads/threading/Lock Lock}, {@fun/Threads/ThreadLock/acquire acquire}, {@fun/Threads/Threads/threading/Lock Lock}, {@fun/Threads/ThreadLock/acquire acquire}, {@fun/Threads/Threads/threading/Lock Lock}, {@fun/Threads/Threads/ThreadLock/acquire acquire}, {@fun/Threads/Threads/acquire acquire}, {@fun/Threads/Threads/acquire acquire}, {@fun/Threads/Threads/Threads/Lock Lock}, {@fun/Threads/Threads/Threads/acquire}, {@threading/LockLock}, {@fun/Threads/Threads/Threads/threads}
Нить Ведущий