क्या कोई बता सकता है कि atomicModifyIORef
कैसे काम करता है? विशेष रूप से:हास्केल: 'atomicModifyIORef' कैसे काम करता है?
(1) क्या यह लॉक की प्रतीक्षा करता है, या अगर विवाद होता है तो ऑप्टिमाइज़िक रूप से प्रयास करें और पुनः प्रयास करें (जैसे TVar
)।
(2) atomicModifyIORef
का हस्ताक्षर modifyIORef
के हस्ताक्षर से अलग क्यों है? विशेष रूप से, यह अतिरिक्त चर b
क्या है?
संपादित करें: मुझे लगता है कि मैंने जवाब दिया है (2), उस b
में निकालने का एक मूल्य है (यदि आवश्यक नहीं है तो यह खाली हो सकता है)। एक थ्रेडेड प्रोग्राम में, मान जानने के लिए मामूली है, लेकिन एक बहुप्रचारित कार्यक्रम में, कोई यह जानना चाहता है कि फ़ंक्शन लागू होने के समय पिछले मूल्य क्या था। मुझे लगता है कि ऐसा क्यों modifyIORef
इस अतिरिक्त वापसी मान (नहीं है के रूप में इस वापसी मान के साथ modifyIORef
के इस तरह के प्रयोगों को शायद atomicModifyIORef
वैसे भी उपयोग करना चाहिए। मैं अभी भी करने के लिए (1) यद्यपि।
क्या यह लॉकिंग करता है या यह आशावादी है? जीएचसी संस्करण बस एक जीएचसी आदिम कहता है। – Clinton
ध्यान दें कि आलस्य के कारण, 'atomicModifyIORef' को केवल वर्तमान मूल्य को एक थंक पर इंगित करना है, वास्तविक कार्य में कुछ देर बाद इसे पढ़ने तक देरी हो रही है। AFAIK, यह अधिकांश प्लेटफार्मों पर एक सीएएस की तरह कुछ संकलित करता है।एक इंटरलॉक एक्सचेंज (कैस) लूप के माध्यम से – hammar
आशावादी। https://github.com/ghc/ghc/blob/45740c29b24ea78b885d3b9f737a8bdc00265f7c/rts/PrimOps.cmm#L364 –