modifyIORef
के हस्ताक्षर पर्याप्त सरल है। एक विकल्प है जो इस मुद्दे को संबोधित करता है:atomicModifyIORef के अतिरिक्त परिणाम पैरामीटर का उद्देश्य क्या है?</p> <pre><code>modifyIORef :: IORef a -> (a -> a) -> IO() </code></pre> <p>दुर्भाग्य से, यह सुरक्षित थ्रेड नहीं है:
atomicModifyIORef :: IORef a -> (a -> (a,b)) -> IO b
इन दो कार्यों के बीच अंतर क्या हैं? को संशोधित करते समय मुझे b
पैरामीटर का उपयोग कैसे करना चाहिए जो किसी अन्य थ्रेड से पढ़ा जा सकता है?
एक इसलिए, यह किया गया था 'atomicModifyIORef :: IORef: तो हम
State
का उपयोग कर समारोह के रूप में निम्नानुसार reformulate कर सकते हैं एक ही उद्देश्य (और सरल, आईएमओ)। दिलचस्प। – chiजो मुझे समझ में नहीं आता है, मुझे 'atomicModifyIORef' के लिए इस सुविधा की आवश्यकता क्यों होगी, लेकिन 'संशोधित IORef' के लिए नहीं? – leftaroundabout
@ बाएंअराउंडबाउट ठीक है, 'संशोधित IORef' किसी भी परमाणु गारंटी प्रदान नहीं करता है, इसलिए यह इसके लिए उपयोगी नहीं होगा। – redneb