freeCodeCamp/guide/arabic/logic/dining-philosophers-problem/index.md

6.0 KiB

title localeTitle
Dining Philosophers Problem تناول الفلاسفة مشكلة

تناول الفلاسفة مشكلة

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

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

التزامن و طريق مسدود

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

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

عرض المشكلة

خمسة فلاسفة صامتة يجلسون على طاولة مستديرة مع أطباق من السباغيتي. يتم وضع الشوكات بين كل زوج من الفلاسفة المجاورين.

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

لا يقتصر تناول الطعام على الكمية الباقية من السباغيتي أو مساحة المعدة. يفترض العرض اللانهائي والطلب لانهائي.

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

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

  1. فكر حتى تصبح الشوكة اليسرى متوفرة ؛ عندما تكون ، استلمها ؛
  2. فكر حتى تتوافر الشوكة اليمنى ؛ عندما تكون ، استلمها ؛
  3. عندما يتم احتجاز الشوكتين ، تناول الطعام لفترة محددة من الوقت ؛
  4. ثم ضع الشوكة اليمنى لأسفل ؛
  5. ثم وضع الشوكة اليسرى لأسفل ؛
  6. كرر من البداية.

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

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

الحلول تشمل: -

  1. الأولوية - يتم إعطاء أولوية أعلى لبعض الفلاسفة ، بحيث تزداد فرصة الحصول على كلتا الشوكتين.
  2. الاستباقية (التأديب) - يتخلى الفلاسفة عن الشوكة المكتسبة دون تناول الطعام ، في حالة عدم توفر الشوكة الأخرى.
  3. التحكيم - يقوم الوسيط بتخصيص الشوك التي تضمن إعطاء شوكتين لشخص واحد ، بنصف واحد إلى عدة أشخاص.

معلومات اكثر:

https://www.wikiwand.com/en/Dining الفلاسفة المشكلة