Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Semaphore = {
- critsec: Mutex
- waiters: CondVar
- count: int
- wakeups: int
- }
- init(sem, v):
- sem.value = v
- sem.mutex = 1
- sem.wakeups = 0
- sem.condval =
- wait(sem):
- mutex_lock(sem.critsec)
- sem.count--
- while sem.value < 0:
- cond_val_wait(SEM_FREE, sem.waiters)
- if wakeups > 0:
- wakeups--
- break
- mutex_unlock(sem.critsec)
- post(sem):
- mutex_lock(sem.critsec)
- sem.count++
- sem.wakeups++
- if sem.count
- conv_val_signal(SEM_FREE, sem.waiters)
- mutex_unlock(sem.critsec)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement