The Gateway to Computer Science Excellence
First time here? Checkout the FAQ!
x
+3 votes
352 views

A concurrent system consists of $3$ processes using a shared resource $R$ in a non-preemptible and mutually exclusive manner. The processes have unique priorities in the range $1 \dots 3$, $3$ being the highest priority. It is required to synchronize the processes such that the resource is always allocated to the highest priority requester. The pseudo code for the system is as follows.

Shared data

mutex:semaphore = 1:/* initialized to 1*/

process[3]:semaphore = 0; /*all initialized to 0 */

R_requested [3]:boolean = false; /*all initialized to flase */

busy: boolean = false; /*initialized to false */


 

Code for processes

begin process
my-priority:integer;
my-priority:=___; /*in the range 1..3*/
repeat
    request_R(my-priority);
    P (proceed [my-priority]);
    {use shared resource R}
    release_R (my-priority);
forever
end process;

Procedures

procedure request_R(priority);
P(mutex);
if busy = true then
    R_requested [priority]:=true;
else
begin
    V(proceed [priority]);
    busy:=true;
end
V(mutex)



Give the pseudo code for the procedure release_R.

asked in Operating System by Veteran (112k points)
edited by | 352 views

1 Answer

0 votes
procedure release_R(priority)
begin
    P(mutex);
    request_R[priority] = false; //this should be false already, just to be safe
    busy = false;
    for (i = 3 downto 1)
    begin
        if R_requeted[i] then
        begin
            R_requested[i] = false;
            busy = true;
            V(proceed[i]);
            break;
        end
    end
    V(mutex);
end

Please verify the solution, I may be wrong.

answered by Active (2k points)

Related questions



Quick search syntax
tags tag:apple
author user:martin
title title:apple
content content:apple
exclude -tag:apple
force match +apple
views views:100
score score:10
answers answers:2
is accepted isaccepted:true
is closed isclosed:true

44,251 questions
49,744 answers
164,045 comments
65,842 users