Answer 2 (new)
Complementing the general answers, I add an addendum, which in my view is considerable, and also practically reinforcing my first response:
As stated in Bruno Costa's reply, the problem in question was formulated by Edsger W. Dijkstra in 1965 .
With that, going back there where there were not many programming languages like today, and also features of the most limited languages, is really a simple exercise to show problems in synchronizations (as it says in the source itself).
Nowadays with the great range of resources and languages we have, the issue is in parts branched out for ourselves due to ideas beyond the proposed context (a simple synchronization exercise).
On Wikipedia, you have all the history and solutions to the problem:
Dining philosophers problem
- Resource Hierarchy Solution
What was the original solution proposed by Dijkstra, treating philosophers as processes and forks as resources.
Solution where you have a "referee" in the context, for example the waiter, who will give the permissions and orders to the philosophers.
In 1984, K. Mani Chandy and J. Misra gave the solution akin to arbitrary, but counting on philosophers to speak to each other using "requests," that is, each philosopher would solicit the fork from his right-hand neighbor and to the left, thus allowing, would have the 2 tools, and in case of failure, could wait to request another and lend his own fork, not falling into deadlock.
Answer 1 (old) [-2]
I will answer briefly from my point of view, with my words, that is, the line of thought is the same, but sometimes it is clear that we can have other ways.
What is the problem of gluttonous philosophers?
As I see it, it's simply a great analogy between process x feature, task x execution, or even more examples that we can fit in.
What does the philosophers' dinner actually model?
A well-crafted problem for a logical question. Although, if applied in the logic would be easier to solve, since we control all the ways.
How important is it to a programmer?
First of all, first of all, "where to begin to solve the situation" and after, what forms, and which is the best.
When should a programmer be directly concerned about this problem?
So that's the "X" of the question as I see it. I understand that, very briefly, we should always have well defined algorithm, not to enter the deadlock, as in the above answer.
That is, the importance of setting priorities, in brief example, a list of tasks that must be performed but depends on each other (they would be the philosophers, who depend on the forks), and then if they all need to be executed, what is the priority, that is, who has the power to move ahead? Or for example, on a scale of 0 to 100, what is the priority level of that?
Is there anything real and everyday that we run into with this problem without knowing it? I do not know, in a database?
An example with database: What is deadlock in SQL Server?
If someone understands differently, please comment!