जबकि बनाम करते-करते हुएक्या परिस्थितियों में कर सकते हैं-जबकि अधिक से अधिक कुशल हो?
जबकि और कर-, जबकि कार्यात्मक रूप से बराबर जब ब्लॉक खाली हैं, हालांकि, जबकि अधिक प्राकृतिक लगता है:
थोड़ी देर केdo {} while (keepLooping());
while (keepLooping()) {}
एक ठेठ उपयोग के मामले/एक खाली ब्लॉक के साथ-साथ परमाणु वस्तुओं के एक अद्यतन औरसेट (सीएएस) के साथ एक बल को मजबूर करना है। उदाहरण के लिए नीचे दिए गए कोड एक धागा सुरक्षित रास्ते में a
बढ़ेगी, जब:
int i;
AtomicInteger a = new AtomicInteger();
while (!a.compareAndSet(i = a.get(), i + 1)) {}
प्रसंग
java.util.concurrent के कई भागों कैस के संचालन के लिए do {} while (...)
मुहावरा और ForkJoinPool
की जावाडोक बताते का उपयोग :
असामान्य
do {} while (!cas...)
की कई घटनाएं हैं जो एक सीएएसएड वैरिएबल के अद्यतन को मजबूर करने का सबसे आसान तरीका है।
के बाद से वे स्वीकार करते हैं कि यह असामान्य है, मैं वे सबसे अच्छा बजाय सरल मतलब लगता है।
प्रश्न
वहाँ स्थितियों में, जहां do {} while (!cas)
while (!cas) {}
से और क्या कारणों के लिए अधिक कुशल हो सकता है?
शायद यह सिर्फ ऐतिहासिक वरीयता है। वैसे भी, क्यों '{} 'बिल्कुल --- --- (शर्त) का उपयोग करें;' मैं यही लिखूंगा। –
@ मार्कोटोपॉलिक ''' पर सहमत हुए। मैंने पाया [यह वीडियो] (http://emergingtech.chariotsolutions.com/2013/04/phillyete-screencast-7-doug-lea-engineering-concurrent-library-components/), जहां डौग ली कहता है लगभग 57:00 : "* सुरक्षित बिंदुओं के कारण, समय-समय पर उपयोग न करें," और स्लाइड "छोटी दौड़ विंडो" का उल्लेख करती है। मुझे लगता है कि वह जीसी सुरक्षित बिंदुओं को संदर्भित करता है हालांकि मुझे नहीं लगता कि यह यहां कैसे अंतर करता है। – assylias
डौग इस बारे में काफी अंडाकार है :) सबसे अच्छा तरीका मैं इसे समझ सकता हूं, जबकि बनाम बनाम के बारे में नहीं है, लेकिन लूप बॉडी का उपयोग असाइनमेंट बनाम सभी चीजों को क्रैम करने के लिए करना है। –