ما هو ترتيب الإدراج إذا كان لدي اثنين من المخازن المؤقتة المعينة للذاكرة المعينة إلى نفس الملف?

StackOverflow https://stackoverflow.com//questions/25020917

سؤال

سؤالي هو ما إذا كان نظام التشغيل سوف يحترم أمر الإدراج (أي.آخر مكتوب ، آخر قرص) أو سيكون الطلب غير متوقع.على سبيل المثال:

    byte[] s1 = "Testing1!".getBytes();
    byte[] s2 = "Testing2!".getBytes();
    byte[] s3 = "Testing3!".getBytes();

    RandomAccessFile raf = new RandomAccessFile("test.txt", "rw");
    FileChannel fc = raf.getChannel();
    MappedByteBuffer mbb1 = fc.map(MapMode.READ_WRITE, 0, 1024 * 1024);
    mbb1.put(s1);

    MappedByteBuffer mbb2 = fc.map(MapMode.READ_WRITE, mbb1.position(), 1024 * 1024);
    mbb2.put(s2);

    MappedByteBuffer mbb3 = fc.map(MapMode.READ_WRITE, mbb1.position() + mbb2.position(), 1024 * 1024);
    mbb3.put(s3);

    mbb1.put(s1); // overwrite mbb2
    mbb1.put(s1); // overwrite mbb3

    mbb1.force(); // go to file
    mbb3.force(); // can this ever overwrite mbb1 in the file?
    mbb2.force(); // can this ever overwrite mbb1 in the file?

هل هو دائما آخر مكتوب, آخر في أو أنا في عداد المفقودين شيء هنا?

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

المحلول

لم أختبر أيا من هذا ، لذلك لا أعرف.

ولكن ، بصراحة ، ليس هناك ما يضمن على أي من هذا الطلب.

لديك mbb.force() الطريقة ، ولكن هذه ليست الطريقة الوحيدة للكتابة على الجهاز ، بل إنها تضمن فقط أنه قد تمت كتابته.

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

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

تحرير:"التغييرات التي تم إجراؤها بواسطة مخازن مؤقتة متعددة تم تعيينها للذاكرة مضمونة لتكون متسقة"

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

لذلك ، يضمن هذا أن جميع التعيينات سترى نفس البيانات داخل مخزن مؤقت متداخل.لكنه لا يعالج متى سيتم كتابة المخازن المؤقتة بالفعل على الجهاز.هذه النقاط لا تزال وثيقة الصلة.

بشكل عام ، يبدو أنك لن تواجه مشكلة إذا تعاملت مع أي جوانب متعددة بشكل صحيح ، وكن على دراية بأن ما تراه في المخزن المؤقت الأساسي قد "يتغير تحت قدميك".

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