Это лишь один из многих примеров, используемых для описания того, что может происходить в параллельном мире, в котором у вас есть множество сущностей, которые могут выполнять действия над общими объектами, не заботясь друг о друге.
Проблема проста:у вас X
философов, расположенных за круглым столом (с вымышленным блюдом для спагетти, которое нужно съесть каждое), и X
вилок, по одному между каждой парой философов.
Правила игры предполагают, что философнужны две вилки, чтобы можно было потреблять его спагетти, и пример показывает, как простое позволение любому из них попробовать есть, не заботясь о ком-либо другом, может привести к
- взаимоблокировкам : каждыйфилософ берет свою левую вилку, а затем все ждут другой, но ни один эгоистичный философ не уронит его, поэтому они будут ждать вечно
- голод : нет никакой гарантии, что любой философ в конечном итоге сможет есть (проверьте страницу Википедии для точного объяснения почему)
- livelocks : еще один классический пример .. если правило налагает на phils попытку получить второй форк после получения первого в течение максимум 5 минут, то отпустите уже приобретенный, который вы можете иметьситуация, в которой все они точно синхронизированы, и они продолжают брать одну ветвь и отпускать ее по истечении времени
В вашем вопросе вы четко говорите об алгоритме, связанном с этой проблемой (поэтому я предполагаю, что алгоритмпредназначен для решения только что описанных проблем), Википедия предлагает 4 из них здесь .