channels: get rid of semaphore locking, replace queues