2010-04-22 5 views
7

आईबीएम.com पर an article के अनुसार, "एक दौड़ की स्थिति एक ऐसी स्थिति है जिसमें दो या दो से अधिक धागे या प्रक्रियाएं कुछ साझा डेटा पढ़ रही हैं या लिख ​​रही हैं, और अंतिम परिणाम धागे निर्धारित होने के समय पर निर्भर करता है। रेस की स्थिति अप्रत्याशित परिणाम और सूक्ष्म कार्यक्रम कीड़े का कारण बन सकता है। " । हालांकि लेख जावा से संबंधित है, लेकिन मुझे सामान्य रूप से एक ही परिभाषा सिखाई गई है।बहुप्रचारित पढ़ने में दौड़ की स्थिति के बारे में क्या?

जहां तक ​​मुझे पता है, रैम से पढ़ने का सरल संचालन विशिष्ट इनपुट लाइनों (पता, पढ़ा आदि) के राज्यों को स्थापित करने और आउटपुट लाइनों के राज्यों को पढ़ने से बना है। यह एक ऐसा ऑपरेशन है जिसे स्पष्ट रूप से दो उपकरणों द्वारा निष्पादित नहीं किया जा सकता है और इसे क्रमबद्ध किया जाना चाहिए।

अब मान लीजिए कि हमारे पास एक स्थिति है जब कुछ धागे स्मृति में किसी ऑब्जेक्ट तक पहुंचते हैं। सिद्धांत रूप में, दौड़ की स्थिति को रोकने के लिए इस पहुंच को क्रमबद्ध किया जाना चाहिए। लेकिन उदा। पाठकों/लेखकों एल्गोरिदम मानते हैं कि पाठकों की मनमानी संख्या एक ही समय में साझा स्मृति का उपयोग कर सकती है।

तो, सवाल यह है: क्या मल्टीथ्रेडिंग (WinAPI उदा। में) का उपयोग करते समय किसी को पढ़ने के लिए एक विशेष लॉक लागू करना पड़ता है? यदि नहीं, क्यों? यह नियंत्रण कहां लागू किया गया है - ओएस, हार्डवेयर?

सादर, कुबा

+0

हा, बतायाया;] –

उत्तर

6

हार्डवेयर स्तर पर स्मृति पढ़ना क्रमिक रूप से किया जाता है - आप इस स्तर पर संगामिति बारे में चिंता करने की जरूरत नहीं है। दो धागे मुद्दे पढ़ते हैं और सभी आवश्यक सामान - पता बस और वास्तविक पढ़ने पर सेटिंग पते मेमोरी एक्सेस हार्डवेयर द्वारा इस तरह से लागू किए जाते हैं कि पढ़ना हमेशा सही काम करेगा।

वास्तव में एक ही पढ़ने के लिए सच है/जब पढ़ा है कि सिवाय परिदृश्यों लिखने और लिखने अनुरोध आप समय के आधार पर अलग अलग परिणाम प्राप्त कर सकेंगे हो जाते हैं और इस कारण है कि आप तुल्यकालन की जरूरत है।

0

इस प्रश्न का कोई आसान जवाब नहीं है। विभिन्न एपीआई (और विभिन्न वातावरण) में मल्टीथ्रेड-जागरूकता और बहुप्रचारित सुरक्षा के विभिन्न स्तर होंगे।

2

जब तक डेटा को बदलने में कुछ भी नहीं है, तो यह कई धागे से इसे पढ़ने के लिए पूरी तरह से सुरक्षित है। यहां तक ​​कि अगर दो सीपीयू (या कोर) दौड़ उसी घड़ी चक्र पर पढ़ने के लिए स्मृति तक पहुंचने के लिए दौड़ती है, तो उनकी पहुंच मेमोरी कंट्रोलर द्वारा क्रमबद्ध की जाएगी और वे एक दूसरे के साथ हस्तक्षेप नहीं करेंगे। एचडब्ल्यू के लिए सही ढंग से काम करने के लिए यह सुविधा आवश्यक है।