تھریڈ لاک آبجیکٹ، کثیر تھریڈ مطابقت پذیری پروسیسنگ کے لئے استعمال کیا جاتا ہے.
کے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}
تار تھریڈ واقعہ