A relationship between processes such that one process cannot proceed beyond a particular point until another process has reached a particular point. For example, when one process is writing data in a buffer to be read by another process, the two processes must be synchronized so that the reading process does not attempt to read the buffer beyond the point at which the writing process has written data in the buffer. Synchronization can be achieved by using a semaphore.