Les ressources ont été chargées... Je charge...

Fermeture de fil

Objet de verrouillage de thread, utilisé pour le traitement de synchronisation multi-thread.

acquérir

Leacquire()la fonction est utilisée pour demander un verrouillage de fil.

acquérir

Veuillez vous référer authreading.Lock()section pour les exemples.

Leacquire()fonction est utilisée pour demander un verrouillage de thread.acquire()fonction d'un objet de verrouillage de thread, il tente d'acquérir le verrouillage. Si le verrouillage n'est pas actuellement détenu par un autre thread, le thread appelant acquiert avec succès le verrouillage et continue l'exécution. Si le verrouillage est déjà détenu par un autre thread, le thread appelantacquire()sera bloqué jusqu'à ce que le verrou soit relâché.

{@fun/Threads/threading/Lock Lock}, {@fun/Threads/ThreadLock/release release} Je suis désolé.

libération

Lerelease()fonction est utilisée pour libérer un verrou de fil (déverrouiller).

libération

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

Test de scénarios d'impasse

Il convient de noter que l'utilisation inappropriée de serrures à fil peut entraîner un blocage.

{@fun/Threads/threading/Lock Lock}, {@fun/Threads/ThreadLock/acquérir acquérir}

Le fil ThreadÉvénement