-protect push with a semaphore