سؤال

مجرد سؤال سريع حول ReadWritelocks في Java (على وجه التحديد تطبيق Reentrantreadwritelock) كما لا أجد وثائق الشمس واضحة.

ماذا يحدث إذا تم تعليق قفل القراءة من خلال موضوع عند طلب قفل الكتابة من قبل آخر؟ هل يجب أن ينتظر مؤشر الخيط القفل للكتابة حتى يتم إصدار جميع أقفال القراءة حاليا؟ أيضا، هل يتم حظر جميع طلبات القفل الجديدة الجديدة حتى يتم منح قفل الكتابة وإصدارها؟

شكرا

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

المحلول

يشرح جافادوك هذا:

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


ماذا يحدث إذا تم تعليق قفل القراءة من خلال موضوع عند طلب قفل الكتابة من قبل آخر؟ هل يجب أن ينتظر مؤشر الخيط القفل للكتابة حتى يتم إصدار جميع أقفال القراءة حاليا؟

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

أيضا، هل يتم حظر جميع طلبات القفل الجديدة الجديدة حتى يتم منح قفل الكتابة وإصدارها؟

نعم

نصائح أخرى

أ ReadWriteLock لا يمكن أن يكون لديك قفل الكتابة عقدت في نفس الوقت كما يقرأ الأقفال. طلبات ل، قل، قفل الكتابة عند عقد قفل قراءة سيؤدي إلى حظر أو فشل.

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