I thought that I would post this since one of my co-workers at Cadence will be gave a webinar on his experience parallelizing an existing application. The application and algorithms involved are really complex. It was especially interesting because it involves legacy code and also the development environment was Windows unlike many EDA applications which run on Linux/Unix. I really recommending watching.
If you aren’t using lambda expressions in your current C# programs, you should begin learning about them before jumping into the new features. C# 3.0 introduced lambda expressions and they are very useful to simplify the parallelized code. They will help you to create code that’s easier to read, understand and maintain.
Several years ago, when I looked for training courses on the subject of parallel programming for shared memory systems I found few courses being offered. Some friends of mine and I did find a very nice course from a 3rd-party vendor on threaded programming. The course mainly focused on "C" and using POSIX threads to explicitly manage thread creation. The course did touch on higher level concepts such implementing a producer consumer using semaphores - but on balance - my recollection of the course was how I had to manage threads as
If you had 4 days to teach parallel programming… to high school students …