ما هي مشكلة القراء والكتاب؟

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

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

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

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

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