semaphore
producer consumer with queue