Studying various library frameworks and O/S facilities is a good way to understand low-level concurrency. Examples you find there can get you started writing concurrent code in a short amount of time.
After you debug your way through a few deadlocks and shared memory corruption issues, you will find that you need some tools for reasoning about and decomposing your concurrency problems. I personally like Herb Sutter's The Pillars of Concurrency article as a starting point. The idea is to better understand why you need concurrency. Are you looking for improved response time, parallel calculation, some combination of reasons?
Understanding the "why" will lead you to a better "what". From there you can always spider out to different low-level approaches: Active Objects, monitor objects, message passing, etc. As you said, there is a lot to know in this field.