मुझे अपेक्षाकृत महंगा डेटा-फ़ेचिंग ऑपरेशन मिला है जिसके परिणामस्वरूप मैं कैश करना चाहता हूं। इस आपरेशन const
तरीकों से कहा जाता है, मोटे तौर पर इस तरह:सी ++ में महंगे डेटा कैशिंग - फ़ंक्शन-स्कोप्ड स्टेटिक्स बनाम परिवर्तनीय सदस्य चर
double AdjustData(double d, int key) const {
double factor = LongRunningOperationToFetchFactor(key);
return factor * d;
}
मैं AdjustData
चाहते हैं const
रहने के लिए है, लेकिन मैं तो मैं केवल यह पहली बार लाने कारक बाहर कैश करने के लिए चाहते हैं। वर्तमान में मैं परिणाम संग्रहीत करने के लिए mutable map<int, double>
का उपयोग कर रहा हूं (नक्शा key
से factor
तक), लेकिन मैं सोच रहा हूं कि फ़ंक्शन-स्कोप्ड स्थिर का उपयोग करना बेहतर समाधान हो सकता है - यह कारक केवल इस फ़ंक्शन द्वारा आवश्यक है, और है कक्षा के बाकी हिस्सों के लिए अप्रासंगिक।
क्या यह जाने का एक अच्छा तरीका प्रतीत होता है? क्या कोई बेहतर विकल्प हैं? विशेष रूप से थ्रेड-सुरक्षा के संबंध में, मैं किस चीज के बारे में सोच सकता हूं।
धन्यवाद,
Dom
लंबे समय तक चलने वाले ऑपरेशन को लॉक करना आवश्यक नहीं है, बस मानचित्र पर कॉल ढूंढें/डालें। –
मुझे लगता है कि आप सही हैं। मुझे इसे आगे ट्यून करने दें। –
ताला पकड़ने के दौरान स्थैतिक मानचित्र बनाना थ्रेड-सुरक्षित होने की गारंटी नहीं है, क्योंकि यदि आप दो थ्रेड इस फ़ंक्शन को पहली बार उपयोग करते हैं तो नक्शा को दोबारा बना सकते हैं और दोबारा नष्ट कर सकते हैं। Http://blogs.msdn.com/oldnewthing/archive/2004/03/08/85901.aspx – bk1e