Those are well known and all belongs to some minimal set each software developer is supposed to understand pretty well, all of them, so I don't understand what could be a problem. You did not report any problems. If you think that "tell" means "give me code", this is not what we do here.
And this is not what you are really interested in. Please see my recent answer:
plz provide me the code in java[
^].
First of all, you need to understand the principles, and, in case of dining philosophers problem, you also need to understand the settings and importance of this case, which is, in particular, is pretty hard to detect automatically during run time.
Please see:
http://en.wikipedia.org/wiki/Producer-consumer_problem[
^],
http://en.wikipedia.org/wiki/Readers-writers_problem[
^],
http://en.wikipedia.org/wiki/Dining_philosophers_problem[
^].
You might say that this answer is trivial and you already know these articles, but this is really all you need. Well, some other sources referenced in these articles could be useful, but this is quite enough to get started. The familiarity with the language, your platform and some relevant APIs is a must.
I can add you some very useful challenge based on my own idea. I tried to implement the code demonstrating the dining philosopher problem based purely on the socket API:
http://en.wikipedia.org/wiki/Socket_API[
^].
Many developers, when asked about IPC or thread synchronization primitives, often fail to mention sockets, but historically, sockets was originally created as the IPC facility, not networking, and later were implemented for networking communication. This would be extremely useful exercise and could make your solution to stand out. The first two problem also can be implemented for sockets. How about that?
—SA