मैं एक फाइल सिस्टम पदानुक्रम के आधार पर लॉक करने में सक्षम होना चाहता हूं।जावा में पदानुक्रमित म्यूटेक्स ताले
थ्रेड 1: उदाहरण के लिए:
lock("/");
doStuff();
unlock();
थ्रेड 2:
lock("/sub/foo");
doStuff();
unlock();
थ्रेड 3:
lock("/sub/bar");
doStuff();
unlock();
थ्रेड 1 पहले तो ताला प्राप्त कर लेता है, तो सूत्र 2 और 3 होगा थ्रेड 1 अनलॉक होने तक अवरुद्ध रहें। हालांकि, अगर थ्रेड 2 पहले लॉक प्राप्त करता है, तो थ्रेड 3 थ्रेड 2 के साथ एक ही समय में निष्पादित करने में सक्षम होना चाहिए। सामान्य नियम यह है कि यदि मूल निर्देशिका पर लॉक है, तो थ्रेड को ब्लॉक करना होगा।
क्या जावा में कुछ भी अंतर्निहित है जो इसे हल करने में मदद कर सकता है? मैं प्रति निर्देशिका लॉक को संग्रहित करना चाहता हूं क्योंकि सैकड़ों हजार निर्देशिकाएं होंगी। जब भी आप उस पेड़ आप जड़ से नीचे जाना में कुछ भी ताला और लक्ष्य के अलावा सब कुछ पर एक रीड-लॉक प्राप्त करने के लिए की जरूरत है
-/
- sub
- foo
- bar
:
+1 गंभीरता से दिलचस्प प्रश्न के लिए। निर्देशिका संरचना पहले से निर्दिष्ट है, या "फाइलें" विज्ञापन-निर्माण कर सकते हैं? इसके अलावा, प्राथमिकता प्रणाली क्या है यदि एक धागा रूट निर्देशिका प्राप्त करना चाहता है जबकि कई अन्य धागे सभी व्यक्तिगत फाइलें प्राप्त करने का प्रयास करते हैं?क्या धागा जड़ चाहता है सिर्फ भूखा है, या क्या आपके पास कुछ प्रकार की गारंटी है जो आपको दिमाग में है? – templatetypedef
मुझे लगता है कि अगर थ्रेड 2 लॉक प्राप्त करता है, तो थ्रेड 1 ब्लॉक करना चाहिए, है ना? – Irfy
इसके पीछे प्रेरणा का हिस्सा फ़ाइल सिस्टम को संशोधित करना है, इसलिए पथ लगातार बदल रहे होंगे। मुझे यकीन नहीं है कि थ्रेड भुखमरी को कैसे संभाला जाए ... ऐसा कुछ है जिसे मैंने वास्तव में नहीं माना है। मुझे लगता है कि एक पठन/लिखने की ताला तंत्र इसे हल करने के करीब हो सकती है और भूखे धागे को संभालने में सक्षम नहीं हो सकती है। –