2013-03-10 14 views
7

Lock द्वारा प्रदत्त Condition का उपयोग करते समय मुझे स्मृति बाधाओं के बारे में कोई प्रश्न है।मेमोरी बाधा और java.util.concurrent.locks.Condition उदाहरण

int putptr, takeptr, count; 

इन विशेषताओं अस्थिर घोषित नहीं किया जाना चाहिए:

the javadoc for Condition में प्रदान की जाती उदाहरण के बारे में, मैं के उपयोग के बारे में कोई प्रश्न है? जैसा कि मैं इसे उदाहरण से समझता हूं, एक थ्रेड में संशोधनों को नहीं देखा जा सकता है, उदाहरण के लिए, count

या यह है कि, जब signal() कहा जाता है, ताला के बाद से किए गए अधिग्रहण कर लिया था सभी संशोधन अन्य थ्रेड के लिए दिखाई दे रहे हैं? synchronized ब्लॉक में कुछ कोड की तरह?

यदि हाँ, संशोधनों दिखाई जब signal() कहा जाता है, या जब unlock() लॉक पर कहा जाता है?

धन्यवाद।

संपादित करें: मैं Lock की जावाडोक में देखें:

सभी लॉक कार्यान्वयन के रूप में द्वारा प्रदान की ही स्मृति तुल्यकालन अर्थ विज्ञान को लागू करना चाहिए निर्मित की निगरानी ताला, जावा ™ भाषा की धारा 17.4 में वर्णित के रूप विशिष्टता:

  • एक सफल लॉक ऑपरेशन में एक सफल लॉक एक्शन के समान स्मृति सिंक्रनाइज़ेशन प्रभाव होते हैं।
  • एक सफल अनलॉक ऑपरेशन में एक ही अनलॉक कार्रवाई के रूप में एक ही स्मृति सिंक्रनाइज़ेशन प्रभाव होता है।

असफल असफल लॉकिंग और संचालन अनलॉक करना, और पुनर्वित्त लॉकिंग/अनलॉकिंग ऑपरेशंस, किसी मेमोरी सिंक्रनाइज़ेशन प्रभाव की आवश्यकता नहीं है।

वे मतलब क्या है: "एक सफल ताला आपरेशन एक synchronized ब्लॉक में प्रवेश के रूप में ही स्मृति तुल्यकालन असर पड़ता है", और "एक सफल अनलॉक आपरेशन एक synchronized ब्लॉक बाहर निकलने के रूप में ही स्मृति तुल्यकालन असर पड़ता है?"

+0

प्रभाव 'सिंक्रनाइज़' और 'ऑब्जेक्ट.वाइट(), ऑब्जेक्ट। नोटिफ़ाई() ' – irreputable

+0

' await()' दर्ज करने पर अनलॉक करता है, और बाहर निकलने पर लॉक होता है। – irreputable

उत्तर

7

जिस तरह से आप पढ़ना चाहिए यह है में, सभी लिखते हैं कि एक lock.unlock से पहले घटित बाद के सभी lock.lock के लिए दिखाई दे रहे हैं। एक धागा जो await आईएनजी है, जब जाग गया, अनिवार्य रूप से lock.lock करेगा। तो सभी लिखते हैं कि पिछले अनलॉक के बाद से अब दिखाई देगा।

signal में कोई स्मृति अर्थशास्त्र नहीं है, क्योंकि आपका बाद का बिंदु or when unlock() is called on the lock सही है।

वे मतलब क्या है: "एक सफल ताला आपरेशन एक तुल्यकालन ब्लॉक में प्रवेश के रूप में ही स्मृति तुल्यकालन असर पड़ता है", और "एक सफल अनलॉक आपरेशन ही स्मृति तुल्यकालन एक तुल्यकालन ब्लॉक बाहर निकलने के रूप में असर पड़ता है?"

हाँ, बिल्कुल! अधिक विशेष रूप से संकलक monitorenter और monitorexit बाइट कोड निर्देश जारी करेगा।

+1

ठीक है, धन्यवाद। क्या आप कृपया मेरा संपादन भी देख सकते हैं? – FBB

+0

पूर्ण उत्तर के लिए धन्यवाद। – FBB

संबंधित मुद्दे