while preparing new article about threading in C++11, for the next C++0x article in SDJ i came across a great text about atomic variables, interfaces and general means of implementing them in the assembly language.
document highlights all the things you should now, with the examples, that makes it easier to understand and get familiar with. if you though caches were the only thing that makes multi-core processing funny - try compile and run time instructions rescheduling (what won't we do for optimization - right?) working with atomic variables in action. :)
i highly recommend reading - have fun folks! :)