मुझे लगता है कि लॉक कीवर्ड क्या कर रहा है में भ्रम है। यह केवल 1 धागा नहीं कह रहा है कोड के उस अनुभाग दर्ज कर सकते हैं लेकिन यह 2 बातें कह रहा है:
- केवल एक धागा जो thisLock
- किसी भी अन्य अनुभाग जिसके साथ thisLock है बंद कर दिया जाता है कोड के इस हिस्से में प्रवेश कर सकते इस थ्रेड को छोड़कर इस धागे को छोड़कर किसी भी थ्रेड द्वारा प्रविष्टि की अनुमति नहीं दी जाएगी।
जो आप सुझाव दे रहे हैं वह केवल पहला होगा लेकिन दोनों नहीं। इस उदाहरण को देखो:
class Account
{
decimal balance;
private Object thisLock = new Object();
private Object thisLock2 = new Object();
public void Withdraw(decimal amount)
{
lock (thisLock)
{
if (amount > balance)
{
throw new Exception("Insufficient funds");
}
balance -= amount;
}
// more code here but no locking necessary...
lock(thisLock)
{
// only one thread can enter here who has thisLock
}
lock (thisLock2)
{
// If T1 (thread1) is working with thisLock, T2 can come here since it has nothing to do
// with thisLock.
}
}
public void AnotherOperation()
{
lock (thisLock)
{
// code here...
}
}
public void YetAnotherOperation()
{
lock (thisLock)
{
// code here...
}
}
}
एक धागा, का कहना है कि टी 1, पहले लॉक के साथ वापसी भाग कर रहा है, लॉक के साथ वर्ग (thisLock) के अन्य सभी वर्गों किसी अन्य धागे से प्रविष्टि के रूप में अच्छी तरह से की अनुमति नहीं है जब । हालांकि, इस लॉक 2 के साथ भाग को अन्य धागे द्वारा दर्ज करने की अनुमति है।
लॉक कीवर्ड के बारे में सोचने का सबसे अच्छा तरीका, कम से कम यह मेरी मदद करता था जब मैं सीख रहा था कि इसे बंधक के रूप में सोचना था। दूसरे शब्दों में, जब कोड के कुछ हिस्सों को निष्पादित किया जा रहा है तो इसे आपके उदाहरण में बंधक (इस लॉक) लेने की आवश्यकता है। तो एक बार जब यह लॉक बंधक के रूप में लिया जाता है, तो कोई अन्य थ्रेड इसे बंधक के रूप में नहीं ले जा सकता है जब तक कि उस धागे बंधक को रिलीज़ न करे। इसलिए, कोड के सभी अन्य अनुभाग जिन्हें एक ही बंधक की आवश्यकता होती है, अनुपलब्ध हो जाती है।
@ सैसे बिल्कुल नहीं, अन्यथा कोई भी नहीं समझ पाएगा कि पहले स्थान पर 'लॉक' का उपयोग कैसे किया जाए। 'लॉक' कथन की आवश्यकता के कारणों को पैरामीटर पारित करने की आवश्यकता बहुत स्पष्ट है, और यदि लेखक उन कारणों को समझ नहीं पाता है तो सवाल बहुत मान्य है। – rucamzu
@rucamzu - मुझे लगता है कि मैंने – Sayse