Synchronization
Consider a producer/consumer problem:
In a producer/consumer relationship, if the producer sees that the consumer has not read the last message from a shared region of memory (also called buffer), it will enter a wait state. When a consumer has read the message from the buffer, it will notify the waiting producer to proceed. If a consumer finds that the buffer is empty, it will also enter a wait state. The producer after writing the buffer will then notify the waiting consumer to proceed.