A common problem to Computer Science is Concurrency. Most of the application we use today, use it in order to better utilise the hardware underneath them, especially when you are dealing with multicore systems.
Now a few days ago I bumped into an interesting theory, Dining Philosophers Problem. I remembered that we have heard about that problem at my university but I had completely forgotten. I searched it a little bit on Wikipedia and through the references I found some excellent related problems that I would like to write here for feature references.
Whether we are trying to make an algorithm faster or serve more request through our Web Server putting multiple machines on work is the only essential process. But problems occurs when we are trying to synchronise those machines. And this is where concurrency methods takes place.
But concurrency is certainly not an easy technique and whether we are facing it in our day life or not, we should have some understanding of it, all it's forms it may appear and common solutions of our problem.