diner using semaphore