यह थोड़ा पागल लग सकता है, लेकिन यह एक दृष्टिकोण है जिसे मैं एक बड़ी लाइब्रेरी के हिस्से के रूप में विचार कर रहा हूं, अगर मैं उचित रूप से निश्चित हो सकता हूं कि यह अजीब व्यवहार नहीं करेगा।मल्टीप्लेक्सिंग सी # 5.0 के थ्रेड पूल पर एसिंक - थ्रेड सुरक्षित?
दृष्टिकोण:
एक SynchronizationContext
कि एक थ्रेड पूल के लिए डिस्पैच के साथ भागो async उपयोगकर्ता कोड।
async void DoSomething()
{
int someState = 2;
await DoSomethingAsync();
someState = 4;
await DoSomethingElseAsync();
// someState guaranteed to be 4?
}
मुझे विश्वास है कि क्या someState
के लिए उपयोग threadsafe होगा नहीं कर रहा हूँ: उपयोगकर्ता कोड कुछ ऐसा दिखाई देगा। जबकि कोड एक "थ्रेड" में चलाया जाएगा, जैसे ऑपरेशन वास्तव में पूरी तरह से आदेश दिया गया है, फिर भी इसे हुड के नीचे कई धागे में विभाजित किया जा सकता है। अगर मेरी समझ सही है, तो आदेश x86 पर सुरक्षित होना चाहिए, और चूंकि चर साझा नहीं किया गया है, इसलिए मुझे कंपाइलर अनुकूलन के बारे में चिंता करने की आवश्यकता नहीं होगी और इसी तरह।
अधिक महत्वपूर्ण बात यह है कि, मुझे इस बात से चिंतित है कि यह ईसीएमए या सीएलआर मेमोरी मॉडल के तहत थ्रेड-सुरक्षित की गारंटी होगी या नहीं।
मुझे काफी यकीन है कि मुझे कतारबद्ध टुकड़े को निष्पादित करने से पहले मेमोरी बाधा डालने की आवश्यकता होगी, लेकिन मुझे यहां मेरे तर्क में पूरी तरह से विश्वास नहीं है (या यह दृष्टिकोण पूरी तरह से अलग कारणों से अप्रभावी हो सकता है) ।
यह एक स्थानीय चर है। यह थ्रेडसेफ कैसे नहीं हो सकता है? IOW आपको क्या लगता है कि इसे किसी अन्य धागे में बदला जा सकता है? (जब तक आप इसे कहीं भी संदर्भित नहीं कर रहे हैं, जिसे दिखाया नहीं जा रहा है यानी 'रेफरी' या कैप्चर वैरिएबल के रूप में)। – leppie
जो मैं समझता हूं उससे, 'प्रतीक्षा' निम्नलिखित कोड को एक निरंतरता में बदल देता है जो अंतर्निहित 'कार्य' समाप्त होने पर वर्तमान 'सिंक्रनाइज़ेशन कॉन्टेक्स्ट' पर निष्पादित हो जाता है। यदि यह थ्रेड पूल में प्रेषण कर रहा है, तो निरंतरता एक अलग थ्रेड पर चल सकती है। यह किसी भी तरह से * समवर्ती * नहीं चलाएगा, लेकिन मुझे यकीन नहीं है कि निरंतरता एक अलग भौतिक धागे पर निष्पादित होने पर 'someState' में परिवर्तनों को दृश्यमान होने की गारंटी दी जाएगी। – ShZ
यह एक अच्छा सवाल है, जिसमें बहुत से लोग पूछने के लिए भी नहीं जानते हैं। –