2009-07-06 8 views
9
 
[ThreadStatic] 
private static Foo _foo; 

public static Foo CurrentFoo { 
    get { 
    if (_foo == null) { 
     _foo = new Foo(); 
    } 
    return _foo; 
    } 
} 

क्या पिछले कोड थ्रेड सुरक्षित है? या क्या हमें विधि को लॉक करने की आवश्यकता है?क्या यह एक थ्रेडस्टैटिक प्रारंभ करने के लिए एक थ्रेड सुरक्षित तरीका है?

उत्तर

14

यदि इसकी थ्रेडस्टैटिक प्रति थ्रेड की एक प्रति है। तो, परिभाषा के अनुसार, इसका धागा सुरक्षित है।

This blog has some good info on ThreadStatic.

+0

यही वह जगह है जहां से मेरा उदाहरण आता है। मैं बस यह पता लगाने की कोशिश कर रहा हूं कि एक थ्रेड के लिए _foo == शून्य प्राप्त करना संभव है, लेकिन फिर एक थ्रेड स्विच होता है और अन्य धागे _foo नए हो जाते हैं, भले ही यह शून्य न हो? –

+1

नहीं। प्रति थ्रेड एक _foo, तो संदर्भ स्विच का कोई प्रभाव नहीं पड़ता है। – Will

1

एक [ThreadStatic] धागा स्थानीय भंडारण के लिए संकलक/भाषा जादू है। दूसरे शब्दों में, यह थ्रेड के लिए बाध्य है, इसलिए यदि कोई संदर्भ स्विच है तो इससे कोई फर्क नहीं पड़ता क्योंकि कोई अन्य थ्रेड सीधे इसका उपयोग नहीं कर सकता है।