संसाधन लोड हो रहा है... लोड करना...

थ्रेडलॉक

थ्रेड लॉक ऑब्जेक्ट, बहु-थ्रेड सिंक्रनाइज़ेशन प्रसंस्करण के लिए प्रयोग किया जाता है.

प्राप्त करना

..acquire()फ़ंक्शन का उपयोग थ्रेड लॉक (लॉक) का अनुरोध करने के लिए किया जाता है।

प्राप्त करना

कृपया देखें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}

धागा थ्रेड घटना