That’s right. Waiting resp. blocking and unblocking only happens if the semaphore count already dropped down to 0 when a task wanted to aquire/take it.
That’s only right if the semaphore was not yet counted down to 0 means no task is actually holding the semaphore. Otherwise the task attempting to aquired the semaphore is blocked regardless of its priority.
Again a (counting) semaphore is semantically and also technically different to a mutex.
Which bigger problem do you want to solve ? Is it similar to the train station example in the post mentioned before ?