मैं है कोड का निम्न भाग:सी # थ्रेड-सुरक्षित में उपज वापसी है?
private Dictionary<object, object> items = new Dictionary<object, object>;
public IEnumerable<object> Keys
{
get
{
foreach (object key in items.Keys)
{
yield return key;
}
}
}
इस सूत्र के लिए सुरक्षित है? यदि नहीं, तो मुझे लूप के आसपास lock
या yield return
रखना होगा?
Thread1 Keys
संपत्ति तक पहुँचता Thread2 अंतर्निहित शब्दकोश में कोई आइटम जोड़ता है, जबकि:
यहाँ मैं क्या मतलब है। थ्रेड 1 थ्रेड 2 के जोड़ से प्रभावित है?
आपकी दूसरी उदाहरण के लिए, लॉक हो जाएगा वापसी एक गणनीय तो अनलॉक। और अनलॉक के बाद आप फिर से शुरू करेंगे। – Guillaume
ओह, आप सही हैं। मैंने अभी देखा है कि यह एक बुरा उदाहरण है। मैं सवाल संपादित करूंगा। – Albic
बस थोड़ा सा प्रकाश डालने के लिए: लॉकिंग के माध्यम से थ्रेड-सुरक्षा महंगा है, इसलिए जब तक आप स्पष्ट रूप से इसके लिए नहीं पूछते हैं, तब तक प्रत्येक क्रिया को स्वचालित रूप से लॉक करने का अर्थ नहीं होता है। –