리소스 로딩... 로딩...

스레드 잠금

스레드 잠금 객체, 멀티 스레드 동기화 처리용

획득

acquire()함수는 스레드 잠금 (lock) 을 요청하는 데 사용됩니다.

취득 (()

참고: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}

스라인 스레드 이벤트