O recurso está a ser carregado... Carregamento...

ThreadLock

Objeto de bloqueio de thread, utilizado para processamento de sincronização multi-thread.

adquire

Oacquire()A função é utilizada para solicitar um bloqueio (bloqueio) do fio.

Adquirir (((

Por favor, consulte othreading.Lock()secção para exemplos.

Oacquire()A função é usada para solicitar um bloqueio de thread.acquire()Função de um objeto de bloqueio de thread, ele tenta adquirir o bloqueio. Se o bloqueio não está atualmente mantido por outro thread, o thread chamador adquire o bloqueio com sucesso e continua a execução. Se o bloqueio já está mantido por outro thread, o thread chamadoracquire()será bloqueado até que a fechadura seja liberada.

Não, não, não, não, não.

libertação

Orelease()A função é utilizada para liberar um bloqueio de fio (desbloqueio).

libertação

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

Teste de cenários de impasse

Deve notar-se que a utilização inadequada de fechaduras de fios pode conduzir a um impasse.

Não, não, não, não, não.

Fios ThreadEvent