To synchronize access to a resource, use one of the synchronization objects in one of the wait functions. The state of a synchronization object is either signaled or nonsignaled. The wait functions allow a thread to block its own execution until a specified nonsignaled object is set to the signaled state.
The following are other synchronization mechanisms:
overlapped input and output
asynchronous procedure calls
critical section objects
interlocked variable access