سؤال

ملاحظة : لأنني قد قرأت وظائف أخرى حول كيفية قفل وفتح ملف. لم أجد أي شيء خاص لأنني لم أكن على علم. لذلك أنا ستعمل وضع السيناريو الخاص بي هنا حتى أن أحدا يمكن أن تعطي بعض الاقتراحات للخروج.

في تجربتي، FileChannel.lock لا يضمن وضع قفل وفتح من ملف عندما تحاول كائنات مختلفة من مثيلات متعددة من JVM لتأمين وتحديث الملف.

والسيناريو في طلبي هو - هناك ثلاثة برامج منفصلة أن تحديث ملف. يتم تشغيل هذه البرامج على الحالات JVM مختلفة. يقول البرامج A، B، C و، والملف هو F. إذا واقفال ملف F، B و C يجب الانتظار لF ان يفرج عنها قبل واحد من البرامج الأخرى يمكن الحصول على عقد على ذلك. هذا يعمل بشكل جيد إذا تم تشغيل البرامج على نفس المثال JVM. للأسف لم تنجح هذه الطريقة في حالات JVM متعددة.

وكان لي فكرة أخرى وهي أن يكون ملف ثابت حيث كنت تشير إلى ما إذا كان ينبغي تحديثها F. محتويات هذا الملف مسطح يمكن أن تكون إما مغلقة أو مقفلة. سوف تكون مقفلة الافتراضي / القيمة الأولية. لذا، عند واحد من البرامج سوف تحتاج إلى تحديث F، فإنه يحتاج إلى رؤية العلم في ملف ثابت. إذا علم يقرأ المقفلة، يجب أن تنتظر. في هذا النهج، هناك مشكلة على الرغم - ماذا لو برامج متعددة تفتح ملف مسطح تماما في نفس الوقت ونرى "UNLOCKED" أو اثنين من البرامج التي كانوا ينتظرون ملف ثابت لقراءة UNLOCKED وبالضبط في نفس الوقت نرى ملف يقرأ " UNLOCKED "؟

والرجال أي فكرة؟

هل كانت مفيدة؟

المحلول

إذا كنت بحاجة إلى تأمين في الملفات، ثم يجب عليك إنشاء دليل. يوجد دليل وسائل "مؤمن"، في عداد المفقودين الدليل يعني مقفلة.

والسبب هو أن إنشاء وحذف الدلائل يجب أن تكون عمليات نووية في أي نظام الملفات. ذلك في أقرب وقت تحاول عمليتين لخلق نفس الدليل، واحد منهم سوف تحصل على خطأ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top