I do not think so.
(1) semephore.count is declared as unsigned int. See Definition of a semaphore:
struct semaphore { spinlock_t lock; unsigned int count; struct list_head wait_list; };
(2) The down () function checks the count value before decreasing it; make sure that the count is not negative.
If you do not implement one mechanism, you cannot use the semaphore directly to fulfill your requirements.
source share