Flags are signals that processes give to each other. One process issues a flag and the others look out for that flag. When it is received, a particular action is taken. Semaphores are similar to flags, except semaphores are used to exchange data, rather than for alerts. Semaphores might be used to coordinate the use of shared memory, for example.
Queues are a place for one process to put data in and another process to take data from.
The receiving program may take data out of the queue in any order. One process opens the pipe and sends data through it to the receiving process. A programmer can open, read, and write to pipes as if they were files, which are very familiar operations. This is a tremendous boon for the programmer. Many are available, but NetBIOS, APPC, and Named Pipes are the most important.