Answer:
See explaination
Explanation:
The code
type printer = monitor
var P: array[0…2] of boolean;
X: condition;
procedure acquire (id: integer, printer-id: integer);
begin
if P[0] and P[1] and P[2] then X.wait(id)
if not P[0] then printer-id := 0;
else if not P[1] then printer-id := 1;
else printer-id := 2;
P[printer-id]:=true;
end;
procedure release (printer-id: integer)
begin
P[printer-id]:=false;
X.signal;
end;
begin
P[0] := P[1] := P[2] := false;
end ;
Note:
Monitors are implemented by using queues to keep track of the processes attempting to become active int he monitor. To be active, a monitor must obtain a lock to allow it to execute the monitor code. Processes that are blocked are put in a queue of processes waiting for an unblocking event to occur.