One main benefit of using threads is the ease of using synchronization facilities. Three basic synchronization techniques are implemented in the threads library: mutexes, condition variables, and joining. More complex synchronization objects can be built using the primitive objects. This is discussed in Making Complex Synchronization Objects.
The following information will help you in using the synchronization facilities:
Thread Programming Concepts
Chapter 11, Threads Programming Guidelines
Threads Library Quick Reference