|
|
|
|
|
by dragontamer
1388 days ago
|
|
> but couldn't you make an idempotent semaphore by changing the signature to be increment/decrement(source, from, to) Think about a mutex lock: if the semaphore (aka: mutex) is already locked, your signature is: sem_wait(mutex, 0, 0). Which is not idempotent. Two "sem_waits(s, 0, 0)" mean that you need two (other) threads to unlock you. One sem_wait(s, 0, 0) means that only one other thread needs to unlock you. ------ Semaphores used in this manner are how you implement reader/writer locks, as well as thread barriers. (If 100 threads are in existence, you wait for 100 semaphore_posts from those 100 other threads). None of the semaphores or mutexes are idempotent. And never can be. |
|