As far as the code shows, you are never firing up a concurrent reader for any of the channels you create. Because they are unbuffered, any writes to them, will block until someone, somewhere reads from the other end. This is not the case in your code.
If tick
is supposed to be the consumer, you should fire it up before going into the loop.
And it should then have a loop itself, so it keeps polling the channels for new values.
go tick(quit, readyQueue, runQueue, waitQueue)
for _, proc := range(procList) {
....
}
Another immediate solution would be to create all the channels with a buffer of 1.
quit := make(chan int, 1)
readyQueue := make(chan Proc, 1)
runQueue := make(chan Proc, 1)
waitQueue := make(chan Proc, 1)
While this will solve your immediate problem, there are still some other potential issues with your design. We would need to know exactly what it is you are trying to accomplish, in order to give a more well rounded answer.