मुझे एहसास हुआ कि स्मृति मॉडल के कारण जावा में डबल चेक लॉकिंग त्रुटिपूर्ण है, लेकिन यह आमतौर पर सिंगलटन पैटर्न के साथ जुड़ा हुआ है और सिंगलटन के निर्माण को अनुकूलित करता है।डबल चेक लॉकिंग - उद्देश्य सी
के बारे में क्या उद्देश्य-सी में इस मामले के तहत:
मैं अगर अपने आवेदन डेटा या नहीं स्ट्रीमिंग है निर्धारित करने के लिए एक बूलियन ध्वज है। मैं 3 तरीकों, startStreaming, stopStreaming, streamingDataReceived है और मैं का उपयोग कर एक से अधिक थ्रेड से बचाने:
- (void) streamingDataReceived:(StreamingData *)streamingData {
if (self.isStreaming) {
@synchronized(self) {
if (self.isStreaming) {
- (void) stopStreaming {
if (self.isStreaming) {
@synchronized(self) {
if (self.isStreaming) {
- (void) startStreaming:(NSArray *)watchlistInstrumentData {
if (!self.isStreaming) {
@synchronized(self) {
if (!self.isStreaming) {
इस दोहरी जांच uneccessary है? क्या डबल चेक में जावा में उद्देश्य-सी में समान समस्याएं हैं? इस पैटर्न (विरोधी पैटर्न) के विकल्प क्या हैं।
धन्यवाद
क्या आप इस उत्तर को औचित्य दे सकते हैं? –
आप विकल्पों के लिए सुझाव जोड़ने के लिए उत्तर का विस्तार कर सकते हैं। उदाहरण के लिए, उद्देश्य-सी में "क्षणिक" या परमाणु इंटेगर/आदि के बराबर है? –