Tài nguyên đang được tải lên... tải...

ThreadLock

Đối tượng khóa Thread, được sử dụng để xử lý đồng bộ hóa nhiều thread.

có được

Cácacquire()chức năng được sử dụng để yêu cầu khóa sợi ( khóa).

có được (((

Vui lòng tham khảothreading.Lock()phần cho các ví dụ.

Cácacquire()chức năng được sử dụng để yêu cầu một khóa thread.acquire()chức năng của một đối tượng khóa chủ đề, nó cố gắng mua khóa. Nếu khóa hiện không được giữ bởi một chủ đề khác, chủ đề gọi thành công mua khóa và tiếp tục thực thi. Nếu khóa đã được giữ bởi một chủ đề khác, chủ đề gọiacquire()sẽ bị chặn cho đến khi khóa được giải phóng.

{@fun/Threads/threading/Lock Lock}, {@fun/Threads/ThreadLock/release release}

giải phóng

Cácrelease()chức năng được sử dụng để giải phóng khóa sợi (đánh khóa).

giải phóng

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

Kiểm tra các kịch bản bế tắc

Cần lưu ý rằng việc sử dụng khóa sợi không đúng cách có thể dẫn đến bế tắc.

{@fun/Threads/threading/Lock Lock}, {@fun/Threads/ThreadLock/acquire acquire}

Sợi ThreadEvent