En la carga de los recursos... Cargando...

Enlace de hilo

Objeto de bloqueo de hilo, utilizado para el procesamiento de sincronización de múltiples hilos.

obtener

Elacquire()La función se utiliza para solicitar un bloqueo de hilo (bloqueo).

¿Qué es esto?

Por favor, consulte elthreading.Lock()Sección para ejemplos.

Elacquire()Cuando un hilo llama elacquire()Si el bloqueo no está actualmente sostenido por otro hilo, el hilo que llama adquiere el bloqueo con éxito y continúa la ejecución. Si el bloqueo ya está sostenido por otro hilo, el hilo que llamaacquire()Se bloqueará hasta que el candado sea liberado.

¿Qué es lo que está pasando?

liberación

Elrelease()Función utilizada para liberar un bloqueo de hilo (desbloqueo).

liberación

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

Prueba de escenarios de punto muerto

Debe tenerse en cuenta que el uso inadecuado de las cerraduras de hilo puede provocar un estancamiento.

¿Por qué no lo haces?

El hilo Enlace Evento