public class Semaphore extends Object
For example, if a process wants to use the printer, it first needs to make sure the printer is available by checking to see if the semaphore has been set. If it is set, it needs to wait to the process that currently has it is finished. however, If the printer were free, the process would set the semaphore and start using the printer, blocking access to all other processes until it finished.
Semphores are a classical technique for protecting critical sections of code from being simultaneously executed by more than one thread. A semaphore is a generalisation of a monitor. A monitor allows only one thread to lock an object at once. A semaphore allows N processes.
The process of grabbing a semaphore for semi-exclusive use is called downing the semaphore because they are
implemented with a countdown integer that decrements for each lock and increments for each unlock.
If a semaphore is fully occupied, new threads wanting to use it will wait until some thread releases its
lock by upping the semaphore. For a semaphore to work, the check for full, and the decrement must be done
all in one atomic uninterruptible instruction. This is done by the release()
method.
Modifier and Type | Method and Description |
---|---|
void |
acquire()
Decrements internal counter, blocking if the counter is already zero or less.
|
boolean |
isReleased() |
void |
release()
Increments internal counter, possibly awakening the thread wait()ing in acquire()
|
void |
tighten()
non blocking decrements internal counter.
|
public void acquire() throws InterruptedException
InterruptedException
- passed from this.wait().public void tighten()
public void release()
public boolean isReleased()
Copyright © 2023 Frank!Framework. All rights reserved.