MONITORS
ü Semaphores
can be very useful for solving concurrency problems, but only if programmers
use them properly. If even one process fails to abide by the proper use of
semaphores, either accidentally or deliberately, then the whole system
breaks down. (And since concurrency problems are by definition rare events, the
problem code may easily go unnoticed and/or be heinous to debug.)
ü For this
reason a higher-level language construct has been developed, called monitors.
Monitor
Usage
A monitor is essentially a class, in which all data is
private, and with the special restriction that only one method within any given
monitor object may be active at the same time. An additional restriction is
that monitor methods may only access the shared data within the monitor and any
data passed to them as parameters. I.e. they cannot access any data external to
the monitor.
v In order
to fully realize the potential of monitors, we need to introduce one additional
new data type, known as a condition.
A variable of type condition has only two legal operations,
wait and signal. I.e. if X was defined as type condition, then legal operations
would be X.wait( ) and X.signal( )
The wait operation blocks a
process until some other process calls signal, and adds the blocked process
onto a list associated with that condition.
The signal process does nothing if there are no processes
waiting on that condition. Otherwise it wakes up exactly one process from the
condition's list of waiting processes. (Contrast this with counting semaphores,
which always affect the semaphore on a signal call.)
Signal and wait - When
process P issues the signal to wake up process Q, P then waits, either for
Q to leave the monitor or on some other condition.
Signal and continue - When P
issues the signal, Q waits, either for P to exit the monitor or for some
other condition.
There are arguments for and
against either choice. Concurrent Pascal offers a third alternative - The
signal call causes the signaling process to immediately exit the monitor, so
that the waiting process can then wake up and proceed.
Implementing
a Monitor Using Semaphores
One possible implementation of a monitor uses a semaphore
"mutex" to control mutual exclusionary access to the monitor, and a
counting semaphore "next" on which processes can suspend themselves
after they are already "inside" the monitor ( in conjunction with
condition variables, see below. ) The integer next_count keeps track of how many
processes are waiting in the next queue. Externally accessible monitor
processes are then implemented as:
v Condition
variables can be implemented using semaphores as well. For a condition x, semaphore "x_sem" and an integer "x_count"
are introduced, both initialized to zero. The wait and signal methods are then
implemented as follows. ( This approach to the condition implements the
signal-and-wait option described above for ensuring that only one process at
time is active inside the monitor. )
Related Topics
Privacy Policy, Terms and Conditions, DMCA Policy and Compliant
Copyright © 2018-2023 BrainKart.com; All Rights Reserved. Developed by Therithal info, Chennai.