C# Implementation
Although the C# code is not yet available for submit. But I tried my code on my local box, and it is doing fine. The purpose of putting here is to ask you guys 
Although the C# code is not yet available for submit. But I tried my code on my local box, and it is doing fine. The purpose of putting here is to ask you guys if I can improve this code further. As of now, I tested it with multiple number of meals too, and it is doing fine.\n\n```\nclass DiningPhilosophers\n{\n    bool[] forksOccupied = new bool[5];\n    private readonly object locker = new object();\n    int numberOfMeals;\n    public DiningPhilosophers(int numberOfMeals)\n    {\n        this.numberOfMeals = numberOfMeals;\n        for (int i = 0; i < 5; i++)\n            forksOccupied[i] = false;\n    }\n\n    public void wantsToEat(int philosopher,\n                    Action<int> pickLeftFork,\n                    Action<int> pickRightFork,\n                    Action<int> eat,\n                    Action<int> putLeftFork,\n                    Action<int> putRightFork)\n    {\n        int i = 0;\n        while (i < numberOfMeals)\n        {\n            lock (locker)\n            {\n                if (forksOccupied[philosopher] || forksOccupied[(philosopher + 1) % 5])\n                {\n                    continue;\n                }\n                else\n                {\n                    forksOccupied[philosopher] = forksOccupied[(philosopher + 1) % 5] = true;\n                    pickLeftFork(philosopher);\n                    pickRightFork(philosopher);\n                }\n            }\n\n            eat(philosopher);\n            i++;\n\n            lock (locker)\n            {\n                putLeftFork(philosopher);\n                putRightFork(philosopher);\n                forksOccupied[philosopher] = forksOccupied[(philosopher + 1) % 5] = false;\n            }\n        }\n    }\n};\n```
[]