अस्थिरता पर्याप्त नहीं है, लेकिन व्यावहारिक रूप से यह हमेशा काम करेगा क्योंकि ऑपरेटिंग सिस्टम शेड्यूलर हमेशा अंततः लॉक लेगा। और एक मजबूत मेमोरी मॉडल के साथ कोर पर अच्छी तरह से काम करेगा, जैसे कि x86 जो कोर के बीच सिंक्रनाइज़ किए गए कैश को रखने के लिए बहुत सारे रस को जलता है।
तो वास्तव में केवल मायने रखता है कि थ्रेड स्टॉप अनुरोध को कितनी जल्दी प्रतिक्रिया देगा। मापना आसान है, बस नियंत्रण थ्रेड में स्टॉपवॉच शुरू करें और कार्यकर्ता थ्रेड में थोड़ी देर के बाद समय रिकॉर्ड करें। परिणाम मैं दोहरा 1000 नमूने ले रहे हैं और औसत लेने से मापा जाता है, बार-बार 10 गुना:
volatile bool, x86: 550 nanoseconds
volatile bool, x64: 550 nanoseconds
ManualResetEvent, x86: 2270 nanoseconds
ManualResetEvent, x64: 2250 nanoseconds
AutoResetEvent, x86: 2500 nanoseconds
AutoResetEvent, x64: 2100 nanoseconds
ManualResetEventSlim, x86: 650 nanoseconds
ManualResetEventSlim, x64: 630 nanoseconds
खबरदार कि अस्थिर bool के लिए परिणाम बहुत, एक कमजोर स्मृति मॉडल के साथ एक प्रोसेसर पर कि अच्छी तरह से देखने के लिए एआरएम तरह की संभावना नहीं है या Itanium। मेरे पास परीक्षण करने के लिए कोई नहीं है।
स्पष्ट रूप से ऐसा लगता है कि आप मैन्युअल रीसेट इवेंटस्लिम का पक्ष लेना चाहते हैं, अच्छे perf और गारंटी दे रहे हैं।
इन परिणामों के साथ एक नोट, वे एक गर्म लूप चलाने वाले कार्यकर्ता थ्रेड के साथ मापा गया था, लगातार स्टॉप हालत का परीक्षण कर रहा था और कोई अन्य काम नहीं कर रहा था। यह वास्तव में वास्तविक कोड के साथ एक अच्छा मैच नहीं है, एक थ्रेड आम तौर पर अक्सर स्टॉप स्थिति की जांच नहीं करेगा। जो इन तकनीकों के बीच अंतर को काफी हद तक अपरिहार्य बनाता है।
स्रोत
2012-08-15 01:17:03
मैं सोने के बजाए टाइमर का उपयोग करूंगा। इसे समाप्त करने के लिए, आप बस टाइमर को रोक सकते हैं। – Servy
मैंने जवाब देने के लिए कुछ अवलोकन जोड़ दिए हैं, मूल रूप से मुझे नहीं लगता कि ये स्निपेट आप जो चाहते हैं वह करते हैं। – Jodrell