bank: use semaphore directly