मैं पदानुक्रमित संगठित संसाधनों तक पहुंच प्रबंधित करने के लिए पदानुक्रमित रूप से व्यवस्थित पढ़ने/लिखने वाले ताले की एक श्रृंखला रखने के लिए सक्षम प्रणाली की तलाश में हूं। यदि एक सबट्री लिखने के लिए बंद कर दिया गया है, तो जब तक इसे जारी नहीं किया जाता है तब तक पूरे उपट्री में कोई अन्य लॉक प्राप्त नहीं किया जाना चाहिए; इसी प्रकार, एक उपट्री में एक लिखने की तालाब को माता-पिता में लॉक करना बंद कर देना चाहिए।पदानुक्रमित पुनर्वित्त पढ़ने/लिखने के लिए जावा में उपयोग करने की क्या रणनीति है?
यहाँ विचारों मैं विचार कर रहे थे इस प्रकार हैं:
Apache Commons Transaction का प्रयोग करें। अनजाने में, परियोजना को मार्च 2008 से अपडेट नहीं किया गया है और अनधिकृत रूप से समाप्त कर दिया गया है। कुछ एपीआई दस्तावेज़ यह इंगित करते थे कि आने वाले संस्करण (1.3 या 2.0) में some kind of hierarchical locking शामिल होगा, लेकिन स्रोत कहीं भी नहीं पाए जाते हैं और ऐसा लगता है कि हम अब उनके एसवीएन भंडार तक नहीं पहुंच सकते हैं।
ReentrantReadWriteLock
s की एक श्रृंखला का उपयोग करें, जिसे मैं श्रेणीबद्ध रूप से व्यवस्थित करता हूं। मैं कोई समवर्ती विशेषज्ञ नहीं हूं, और मैं खुद ही ऐसा करने से थोड़ा डरता हूं। शुरुआती विचार यह इंगित करते थे कि इससे पहले कि मैं एक उप-लॉक को लॉक करने का प्रयास कर सकूं, मुझेReentrantReadWriteLock
एस के प्रबंधन की पूरी संरचना पर बाहरी लॉक का उपयोग करना होगा - ताकि लॉक को रिलीज़ करने के लिए भी मुझे उपयोग करना होगा बाहरी ताला ...java.util.concurrent
औरjava.util.concurrent.atomic
सेउपयोग कक्षाओं का सबसे प्रभावशाली तरीका की तुलना में मैं
ReentrantReadWriteLock
रों की एक श्रृंखला के साथ कर सकता मेरी श्रेणीबद्ध ताला लागू करने के लिए।
मैं उस अंतिम सड़क पर जाने के लिए तैयार हूं, लेकिन मुझे आश्चर्य हुआ कि कोई भी बाहरी पुस्तकालय नहीं ढूंढ पाएगा जो इस समस्या को बेहतर तरीके से हल करेगा। तो:
- क्या मुझे कुछ स्पष्ट समाधान याद आया है?
- या यह समस्या ठीक से हल करने के लिए विशेष रूप से कठिन है?
'परमाणु' से दूर रहें, यह हास्यास्पद रूप से समझने और कार्यान्वित करने के लिए सूक्ष्म है। – toto2
आपका दूसरा समाधान सही लगता है। जब आप नोड को लॉक करना चाहते हैं तो आपको वैश्विक लॉक प्राप्त करने की आवश्यकता है, ताकि आप जांच सकें कि उस नोड के किसी भी बच्चे को लॉक नहीं किया गया है, और यह भी कि उसके किसी भी पैरेंट को लॉक नहीं किया गया है। – toto2
वैसे, कॉमन्स लेनदेन [उपलब्ध] है (http://commons.apache.org/transaction/download_transaction.cgi), लेकिन मुझे नहीं पता कि यह आपके लिए उपयोगी है या नहीं। – toto2