Multithreading requires a different way of thinking about function interactions. The following books are recommended reading.
Concurrent Programming by Alan Burns & Geoff Davies (Addison-Wesley, 1993)
Distributed Algorithms and Protocols by Michel Raynal (Wiley, 1988)
Operating System Concepts by Silberschatz, Peterson, & Galvin (Addison-Wesley, 1991)
Principles of Concurrent Programming by M. Ben-Ari (Prentice-Hall, 1982)
Programming with Threads by Steve Kleiman, Devang Shah, & Bart Smaalders (Prentice Hall, 1996)
Programming with POSIXTM Threads by David R. Butenhof (Addison-Wesley Professional, 1997)