Yes. The concept of pipes and channels are very similar. Essentially, each write should be accompanied with a read. If you produce something from the producer kernel you would want it to be consumed. Otherwise, the data will just be sitting in the fifo. If you are using blocking channels or pipes, then it will essentially stall until that data is consumed.
So to put it this way, when you launch the kernel from the host side, if you're using NDRange, you need to specify the global work size. This is the number of times your kernel is going to run, or the number of threads you send to the kernel. Each thread will run the kernel, each kernel run sends 1 item and so if your global work size is N, you will send N times. So you should always know how many times the producer sends data on the channel.