क्या धागा सुरक्षा को साबित करना संभव है?


10

एक प्रोग्राम जो चर और निर्देशों से मिलकर बनता है, जो इन चरों को संशोधित करता है, और एक सिंक्रोनाइज़ेशन आदिम (एक मॉनीटर, म्यूटेक्स, जावा का सिंक्रोनाइज़ या सी # लॉक), क्या यह साबित करना संभव है कि ऐसा प्रोग्राम थ्रेड सुरक्षित है?

क्या थ्रेड सुरक्षा या रेसिंग स्थितियों जैसी चीजों का वर्णन करने के लिए एक औपचारिक मॉडल भी है?


2
हां, लेकिन वास्तविक दुनिया की भाषाएं गधे में दर्द हो सकती हैं क्योंकि उनके समवर्ती शब्दार्थ हमेशा अच्छी तरह से परिभाषित / निश्चित नहीं होते हैं। इसके अलावा, हर मॉडल में सब कुछ निर्णायक नहीं है। यह एक विस्तृत क्षेत्र है; एक छाप पाने के लिए Google "कॉन्सिक्वेंसी थ्योरी"। विशेष रूप से, पेट्री नेट से संबंधित एक समृद्ध सिद्धांत है।
राफेल

जवाबों:


10

यह साबित करना कि एक प्रोग्राम "थ्रेड सेफ" कठिन है। हालांकि, यह संभव है कि "डेटा रेस" शब्द को संक्षिप्त और औपचारिक रूप से परिभाषित किया जाए। और यह निर्धारित करना संभव है कि किसी प्रोग्राम के विशिष्ट रन का निष्पादन ट्रेस करता है या ट्रेस के आकार के आनुपातिक समय में डेटा रेस नहीं करता है। इस प्रकार का विश्लेषण कम से कम 1988 तक वापस चला जाता है: बार्टन पी। मिलर, जोंग-देओक चोई, "ए मेकेनिज्म फॉर एफिशिएंट डिबगिंग ऑफ पैरेलल प्रोग्राम्स", कॉन्फ। प्रोग पर। लैंग। Dsgn। और Impl। (PLDI-1988): 135-144

किसी निष्पादन के निशान को देखते हुए हम पहली बार ट्रेस में होने वाली घटनाओं के बीच आंशिक-क्रम से पहले परिभाषित करते हैं। दो घटनाओं को देखते हुए और जो एक ही धागे पर होते हैं तो या । (एक ही थ्रेड पर ईवेंट्स प्रोग्रामिंग भाषा के अनुक्रमिक शब्दार्थों द्वारा दिए गए कुल आदेश का निर्माण करते हैं।) सिंक्रोनाइज़ेशन इवेंट्स (ये म्यूटेक्स प्राप्त कर सकते हैं और जारी कर सकते हैं, उदाहरण के लिए), आंशिक ऑर्डर होने से पहले एक अतिरिक्त इंटर-थ्रेड होता है। (यदि थ्रेड एक म्यूटेक्स जारी करता है और फिर थ्रेड उस म्यूटेक्स का अधिग्रहण करता है तो हम कहते हैं कि रिलीज होता है-अधिग्रहण से पहले।)aba<bb<aST

फिर दो दिए गए डेटा पहुंच (चर रहे हैं करने के लिए पढ़ता है या राईट नहीं तुल्यकालन चर) और है कि एक ही स्मृति स्थान पर हैं, लेकिन अलग धागे से और जहां या तो या एक लिखने आपरेशन हम कहते हैं एक डेटा- है कि वहाँ है और बीच की दौड़ यदि न तो और न ही ।abababa<bb<a

सी ++ 11 मानक एक अच्छा उदाहरण है। (संबंधित अनुभाग 1.10 ड्राफ्ट स्पेक्स में ऑनलाइन उपलब्ध हैं।) C ++ 11 सिंक्रोनाइज़ेशन ऑब्जेक्ट्स (म्यूटेक्स और एक atomic<>प्रकार के साथ घोषित चर ) और अन्य सभी डेटा के बीच अंतर करता है। C ++ 11 युक्ति कहती है कि प्रोग्रामर एक मल्टीथ्रेड प्रोग्राम के ट्रेस पर डेटा एक्सेस के बारे में कारण बना सकता है जैसे कि यह क्रमिक रूप से सुसंगत था यदि डेटा एक्सेस सभी डेटा-रेस फ्री हैं।

हेलग्रिंड टूल (वेलग्रिंड का हिस्सा) इस तरह का होता है-पहले डेटा-आधारित पता लगाने के रूप में कई वाणिज्यिक उपकरण करते हैं (जैसे, इंटेल इंस्पेक्टर एक्सई।) आधुनिक उपकरणों में एल्गोरिदम वेक्टर थ्रेड को हर थ्रेड और सिंक्रनाइज़ेशन से जुड़े रखने पर आधारित हैं। वस्तु। मुझे लगता है कि डेटा-रेस का पता लगाने के लिए वेक्टर घड़ियों का उपयोग करने की इस तकनीक का बीड़ा मिश्रील रोनसे ने उठाया था ; कोएन डी बोशेरे: "रिकप्ले: एक पूरी तरह से एकीकृत व्यावहारिक रिकॉर्ड / रिप्ले सिस्टम", एसीएम ट्रांस। कंप्यूटर। Syst। 17 (2): 133-152, 1999


6

व्यावहारिक पक्ष से, एक सत्यापन प्रणाली वीसीसी है जिसे औपचारिक रूप से सी कार्यक्रमों की धागा सुरक्षा साबित करने के लिए उपयोग किया जा सकता है।

यह वेब साइट से एक उद्धरण है:

वीसीसी संगामिति का समर्थन करता है - आप उन कार्यक्रमों को सत्यापित करने के लिए वीसीसी का उपयोग कर सकते हैं जो मोटे अनाज और महीन दाने वाली दोनों संगामियों का उपयोग करते हैं। यहां तक ​​कि आप इसका उपयोग अपने संगामिति नियंत्रण आदिम सत्यापित करने के लिए भी कर सकते हैं। किसी फ़ंक्शन को सत्यापित करना किसी भी समवर्ती वातावरण में अपने थ्रेड सुरक्षा की गारंटी देता है जो अपने कार्यों और डेटा संरचनाओं पर अनुबंध का सम्मान करता है।


2
यह कैसे काम करता है? अंतर्निहित औपचारिक मॉडल क्या है? ध्यान दें कि ओपी (केवल) एक उपकरण के लिए नहीं कहता है!
राफेल

1

यह एक बहुत ही कठिन क्षेत्र है ताकि दौड़ की परिस्थितियों को दूर करने के लिए कार्यक्रम की शुद्धता सुनिश्चित की जा सके, एक प्रकार की समानांतर प्रसंस्करण की "achilles एड़ी"। प्रोग्राम की शुद्धता के लिए सबसे अच्छा तरीका आम तौर पर निम्न-स्तर की प्राथमिकताओं से बचने और उच्च-स्तरीय डिज़ाइन पैटर्न (जैसे पुस्तकालयों से) के साथ काम करना है जो थ्रेड सिंक्रनाइज़ेशन सुनिश्चित करते हैं। होरे द्वारा अनुक्रमिक प्रक्रियाओं को संप्रेषित करने वाला एक मॉडल सीएसपी है, जिसमें शुद्धता के कुछ प्रमाण दिए गए हैं जो कि डेवलपर्स खुद को "ढांचे" तक सीमित रखते हैं। इसमें कुछ वैचारिक समानता और कालानुक्रमिक उत्पत्ति / यूनिक्स के "पाइप और फिल्टर" को ओवरलैप करना है, हालांकि दोनों के बीच एक सीधा लिंक havent (अभी तक?) मिला।

दो अन्य रूपरेखाएँ, जो डिज़ाइन पैटर्न के माध्यम से समानांतरता सुधार को बेहतर बनाने का प्रयास करती हैं, और जिनके पास इस उद्देश्य के अधिकांश मानक / ज्ञात एल्गोरिदम / डिज़ाइन पैटर्न हैं:


1
यह अच्छी (प्रोग्रामिंग) सलाह हो सकती है, लेकिन यह (सीएस) सवाल का जवाब नहीं देती है।
राफेल

1
?!? आलोचना विशिष्ट नहीं है
vzn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.