Well... Threadsafe programming is not such a difficult thing, but you need a clear mind concerning mutual exclusion, semaphores/mutexes, and, as a corollary who Djikstra is.
I've spent several months working on the Chorus microkernel where threads are the common (and not the special) thing. Maybe I can state a few general things. (Section titles are here to help the hurrying reader.)