(ध्यान दें कि यह प्रश्न सीएएस के बारे में नहीं है, यह " जावाडोक में असफल हो सकता है)। "नकली तौर पर विफल हो सकता है":कमजोर कैसे हो सकता है कमांडर एंडसेट विफल हो सकता है अगर यह बिल्कुल एंड्रेट की तरह लागू किया गया है?
AtomicInteger
वर्ग से इन दो तरीकों के बीच जावाडोक में फर्क सिर्फ इतना है कि weakCompareAndSet टिप्पणी होता है।
अब जब तक मेरी आँखों कुछ जादू द्वारा धोखा दिया जाता है, दोनों विधि दिखते हैं ठीक उसी कर रहे हैं:
public final boolean compareAndSet(int expect, int update) {
return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
}
/* ...
* May fail spuriously.
*/
public final boolean weakCompareAndSet(int expect, int update) {
return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
}
तो मुझे लगता है कि मतलब है "मई" नहीं है "चाहिए" लेकिन फिर क्यों डॉन 'टी हम सब अपने codebase को यह जोड़ना प्रारंभ करें:
public void doIt() {
a();
}
/**
* May fail spuriously
*/
public void weakDoIt() {
a();
}
मैं वास्तव में है कि weakCompareAndSet()compareAndSet() के रूप में भी ऐसा ही प्रतीत होता है के साथ भ्रमित कर रहा हूँ अभी तक कि "नकली तौर पर विफल हो सकता है" जबकि दूसरा नहीं कर सकता।
जाहिर है "कमजोर" और "नकली असफल" से संबंधित एक तरह से कर रहे हैं "होता है-पहले" आदेश के लिए लेकिन मैं अभी भी बहुत इन दो AtomicInteger (और AtomicLong आदि) तरीके से संदेह में हूँ: जाहिरा तौर पर, क्योंकि वे बिल्कुल वही unsafe.compareAndSwapInt विधि पर कॉल करें।
मैं विशेष रूप से उलझन में है कि AtomicInteger
जावा मेमोरी मॉडल परिवर्तन के बाद, जावा 1.5 में पेश किया गया तो (ताकि यह स्पष्ट रूप से कुछ है कि हो सकता है "1.4 में नकली तौर पर असफल" नहीं है, लेकिन जिसका व्यवहार को बदलकर "करेगा हूँ 1.5 " में नकली रूप से विफल नहीं है)।
अच्छा प्रश्न Wiz –
वास्तव में अजीब। यह एपीआई भविष्य के सबूत हो सकता है, लेकिन यह इसके बारे में जाने का एक अजीब तरीका है। ऐसा लगता है कि 'एटमिकएक्सजेड' वर्गों की सभी चीजें 'तुलना और सेट' और 'कमजोर कॉम्पारे एंडसेट' में समान होती हैं, इसलिए ऐसा नहीं है कि यह कार्यान्वयन के बीच स्थिरता के लिए है। – skaffman
यह भी देखें http://stackoverflow.com/questions/4183202/java-compare-and-swap-semantics-and-performance – assylias