+ All Categories
Home > Documents > Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11)...

Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11)...

Date post: 11-Aug-2020
Category:
Upload: others
View: 3 times
Download: 0 times
Share this document with a friend
39
Transcript
Page 1: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Semaphores

INF4140

14.09.11

Lecture 3

INF4140 (14.09.11) Semaphores Lecture 3 1 / 39

Page 2: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Outline

Barriers

Semaphores

Main ideasImportant synchronization problems

INF4140 (14.09.11) Semaphores Lecture 3 2 / 39

Page 3: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Barrier Synchronization

Parallel computation of disjoint parts (e.g., array elements)

Loop in each process, each iteration depends on the result from lastiteration

process Worker[i=1 to n] {

while (true) {

Code to implement task i;Wait for all n tasks to complete; # Barrier

}

}

All processes must reach the barrier before any of them can continue

INF4140 (14.09.11) Semaphores Lecture 3 3 / 39

Page 4: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Shared Counter

Processes must be synchronized after computing their (sub)tasks.The synchronization can be implemented by using a shared counter:int count = 0;

process Worker[i=1 to n] {

while (true) {

Task i< count = count + 1; >

< await (count == n); >

}

}

Can be implemented by fetch-and-add (FA) instructionDrawbacks:

count must be reset between each iteration

Must be modi�ed by atomic operations

Ine�cient: many processes are reading and writing to count at the

same time

INF4140 (14.09.11) Semaphores Lecture 3 4 / 39

Page 5: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Flags and coordinators

Goal: Avoid overload of read and write operations on one variable.Split shared counter → several local variables.

Worker[i]:

arrive[i] = 1;

< await (continue[i] == 1);>

Coordinator:

for [i=1 to n] < await (arrive[i]==1);>

for [i=1 to n] continue[i] = 1;

In a loop, the �ags must be cleard before the next iteration

Flag synchronization principles:

The process that waits for a �ag is the one that should clear the �ag

A �ag should not be set until it is known that it is clear

INF4140 (14.09.11) Semaphores Lecture 3 5 / 39

Page 6: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Flags and coordinators

int arrive[1:n] = ([n] 0), continue[1:n] = ([n] 0);

process Worker[i = 1 to n] { process Coordinator {

while(true) { while(true) {

Task i ; for[i = 1 to n] {

arrive[i] = 1; <await (arrive[i]==1);>

<await (continue[i]==1);> arrive[i] = 0;

continue[i] = 0; }

} for [i = 1 to n]

} continue[i] = 1;

}

}

INF4140 (14.09.11) Semaphores Lecture 3 6 / 39

Page 7: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Combining Tree Barrier

The worker and coordinator roles can be combined

Combining tree barrier: processes organized in a tree structure.Arrive signals are sent up the tree, continue signals down

INF4140 (14.09.11) Semaphores Lecture 3 7 / 39

Page 8: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Implementation of Critical Sections

bool lock = false;

Entry: <await (!lock) lock = true>

Critical sectionExit: <lock = false;>

Spin lock implementation of entry: while (TS(lock)) skip

Drawbacks:

Busy waiting protocols are often complicated

Ine�cient if there are fever processors than processes

Should not waste time executing a skip loop

No clear distinction between variables used for synchronization andcomputation

Desirable to have a special tools for synchronization protocols

INF4140 (14.09.11) Semaphores Lecture 3 8 / 39

Page 9: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Semaphores

Introduced by Dijkstra in 1968

Originates from railroad tra�c synchronization

Railroad semaphores indicates whether the track ahead is clear oroccupied by another train

Clear Occupied

INF4140 (14.09.11) Semaphores Lecture 3 9 / 39

Page 10: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Properties

Semaphores in concurrent programs work in a similar way

Used to implement mutex and condition synchronization

Included in most standard libraries for concurrent programming

INF4140 (14.09.11) Semaphores Lecture 3 10 / 39

Page 11: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Concept

A semaphore is special kind of shared program variable

The value of a semaphore is a non-negative integer

Can only be manipulated by the following two atomic operations:P: (Passeren) Wait for signal - want to pass

e�ect: wait until the value is greater than zero, and decrease the valueby one

V: (Vrijgeven )Signal an event - release

e�ect: increase the value by one

INF4140 (14.09.11) Semaphores Lecture 3 11 / 39

Page 12: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Syntax

A semaphore is declared by either:

sem s; default initial value is zerosem s = 1;sem s[4] = ([4] 1);

The P operation

syntax: P(s)implementation : <await (s>0) s = s - 1;>

The V operation

syntax: V(s)implementation : <s = s + 1;>

Important: No direct access to the value of a semaphore.For instance a test like if (s==1) {...} is not allowed!

INF4140 (14.09.11) Semaphores Lecture 3 12 / 39

Page 13: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Kinds of semaphores

Kinds of semaphores

General semaphore: possible values - all non-negative integersBinary semaphore: possible values - 0 and 1

Fairness: as for await-statements. In most languages processes delayedwhile executing P-operations are awaken in the order they wheredelayed

INF4140 (14.09.11) Semaphores Lecture 3 13 / 39

Page 14: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Mutex

Mutex implemented by a binary semaphore

sem mutex = 1;

process CS[i = 1 to n] {

while (true) {

P(mutex);

critical sectionV(mutex);

noncritical section}

}

The semaphore is initially 1 and always P before V → Binary semaphore

INF4140 (14.09.11) Semaphores Lecture 3 14 / 39

Page 15: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Barrier synchronization

Semaphores may be used for barrier synchronizationsem arrive1 = 0, arrive2 = 0;

process Worker1 {...

V(arrive1); reach the barrierP(arrive2); wait for other processes

...}

process Worker2 {...

V(arrive2); reach the barrierP(arrive1); wait for other processes

...}

INF4140 (14.09.11) Semaphores Lecture 3 15 / 39

Page 16: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Split binary semaphores

A set of semaphores may form a split binary semaphore if the sum of allsemaphores never exceeds 1. Split binary semaphores can be used asfollows to implement mutex.

Consider a program with more than one binary semaphore

Let one of these semaphores be initialized to 1 and the others to 0

Let all processes call P on a semaphore, before calling V on (another)semaphore

Then the code between the P and the V call will be executed inmutex. All semaphores will have the value 0.

INF4140 (14.09.11) Semaphores Lecture 3 16 / 39

Page 17: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Producer/consumer with split binary semaphores

typeT buf; /* Bu�er of some type T */sem empty = 1, full = 0;

process Producer{

while (true){...

P(empty);

buf = data;

V(full);

}

}

process Consumer{

while (true){

P(full);

result = buf;

V(empty);...

}

}

empty and full are both binary semaphores, together they form a splitbinary semaphore.This solution works if there are several producers/consumers, but bu�ercapacity might be a problem

INF4140 (14.09.11) Semaphores Lecture 3 17 / 39

Page 18: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Increasing bu�er capacity

In the example the producer must wait for the consumer to empty thebu�er before it can produce a new entry.

It is a relatively simple task to generalize to a bu�er of size n.

We will use:

A ring-bu�er represented by an array, and two integers rear andfront.General semaphores to keep track of the number of free slots

front rear

Data

INF4140 (14.09.11) Semaphores Lecture 3 18 / 39

Page 19: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Producer/consumer with increased bu�er capacity

typeT buf[n]; /* Array av en type T */int front = 0, rear = 0;

sem empty = n, full = 0;

process Producer{

while (true){...

P(empty);

buf[rear] = data;

rear = rear + 1 % n;

V(full);

}

}

process Consumer{

while (true){

P(full);

result = buf[front];

front = front + 1 % n;

V(empty);...

}

}

What if there are several producers or consumers?

INF4140 (14.09.11) Semaphores Lecture 3 19 / 39

Page 20: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Increasing the number of processes

Let us consider a situation with several producers and consumers.

New synchronization problems:

Avoid that two producers deposits to buf[rear] before rear isupdatedAvoid that two consumers fetches from buf[front] before front isupdated.

Solutions

Introduce a binary semaphore mutexDeposit to deny two producers todeposit to the bu�er at the same time.Introduce a binary semaphore mutexFetch to deny two consumers tofetch from the bu�er at the same time.

INF4140 (14.09.11) Semaphores Lecture 3 20 / 39

Page 21: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Producer/consumer with several processes

typeT buf[T]; int front = 0, rear = 0;

sem empty = n, full = 0, mutexDeposit = 1, mutexFetch = 1;

process Producer[i = 1 to M]{

while (true){...

P(empty);

P(mutexDeposit);

buf[rear] = data;

rear = rear + 1 % n;

V(mutexDeposit);

V(full);

}

}

process Consumer[i = 1 to N]{

while (true){...

P(full);

P(mutexFetch);

result = buf[front];

front = front + 1 % n;

V(mutexFetch);

V(empty);

}

}

INF4140 (14.09.11) Semaphores Lecture 3 21 / 39

Page 22: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Problem: Dining philosophers introduction

Five philosophers sit around a circular table.

One fork is placed between each pair of philosophers

The philosophers alternates between thinking and eating

A philosopher need two forks to eat.

1image from wikipedia.orgINF4140 (14.09.11) Semaphores Lecture 3 22 / 39

Page 23: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Dining philosophers

A sketch of the program may look like this:process Philosopher [i = 0 to 4] {

while (true) {

think;

acquire forks;

eat;

release forks;

}

}

We have to program the actions acquire forks and release forks

INF4140 (14.09.11) Semaphores Lecture 3 23 / 39

Page 24: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Dining philosophers 1st attempt

Let the forks be semaphores

Let the philosophers pick up the left fork �rst

sem fork[5] = ( [5] 1)

process Philosopher [i = 0 to 4] {

while (true) {

think;P(fork[i]); P(fork[(i+1)%5]);

eat;V(fork[i]; V(fork[(i+1)%5]);

}

}

deadlock?

INF4140 (14.09.11) Semaphores Lecture 3 24 / 39

Page 25: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Dining philosophers 2nd attempt

To avoid deadlock, let Philosopher4 grab the right fork �rst.sem fork[5] = ( [5] 1)

process Philosopher [i = 0 to 3] {

while (true) {

think;P(fork[i]); P(fork[i+1]);

eat;V(fork[i]; V(fork[i+1]);

}

}

process Philosopher4 {

while (true) {

think;P(fork[0]); P(fork[4]);

eat;V(fork[0]; V(fork[4]);

}

}

INF4140 (14.09.11) Semaphores Lecture 3 25 / 39

Page 26: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Readers/Writers overview

Classical synchronization problem

Reader and writer processes share a database

Readers reads from the database

Writers reads and updates the database

Writers need mutually exclusive access

When no writers have access, many readers may access the database

INF4140 (14.09.11) Semaphores Lecture 3 26 / 39

Page 27: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Readers/Writers approaches

Dining philosophers: Pair of processes competes for access to forks

Readers/writers: Di�erent classes of processes competes for access tothe database

Readers compete with writersWriters compete both with readers and other writers

General synchronization problem:

Readers must wait until no writers are active in DBWriters must wait until no readers or writers are active in DB

We will look at two di�erent approaches:

Mutex: easy to implement, but unfairCondition Synchronization:

Using a split binary semaphoreEasy to adapt to di�erent scheduling strategies

INF4140 (14.09.11) Semaphores Lecture 3 27 / 39

Page 28: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Readers/Writers with Mutex (1)

sem rw = 1;

process Reader [i = 1 to M] {

while (true) {

...

P(rw);

Read from DB

V(rw);

}

}

process Writer [i = 1 to N] {

while (true) {

...

P(rw);

Write to DB

V(rw);

}

}

But: We want more than one reader simultaneously

INF4140 (14.09.11) Semaphores Lecture 3 28 / 39

Page 29: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Readers/Writers with Mutex (2)

Give access to more than one reader

int nr = 0; # number of active readers

sem rw = 1; # lock for reader/writer exclusion

process Reader [i = 1 to M] {

while (true) {

.

.

.

< nr = nr + 1;

if (nr == 1) P(rw); >

Read from DB

< nr = nr - 1;

if (nr == 0) V(rw); >

}

}

process Writer [i = 1 to N] {

while (true) {

.

.

.

P(rw);

Write to DB

V(rw);

}

}

We have to make the entry and exit of the CS atomic

INF4140 (14.09.11) Semaphores Lecture 3 29 / 39

Page 30: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Readers/Writers with Mutex (3)

int nr = 0; # number of active readers

sem rw = 1; # lock for reader/writer exclusion

sem mutexR = 1; # mutex for readers

process Reader [i = 1 to M] {

while (true) {

...

P(mutexR); nr = nr + 1; if (nr == 1) P(rw); V(mutexR)

Read from DB

P(mutexR); nr = nr - 1; if (nr == 0) V(rw); V(mutexR)

}

}

What happens if we have a constant stream of readers?

INF4140 (14.09.11) Semaphores Lecture 3 30 / 39

Page 31: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Readers/Writers with condition synchronization -overview

The mutex solution solved two separate synchronization problems

Reader vs. writer for access to the databaseReader vs. reader for access to the counter

We shall now look at a solution based on condition synchronization

INF4140 (14.09.11) Semaphores Lecture 3 31 / 39

Page 32: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Readers/Writers with condition synchronization -invariant

Let us try to �nd a reasonable invariant for the system.

It must state that:

When a writer access the DB, no one else canWhen no writers access the DB, one or more readers may

Let us introduce two counters:

nr is the number of active readersnw is the number of active writers

The invariant may be:RW: (nr == 0 or nw == 0) and nw <= 1

INF4140 (14.09.11) Semaphores Lecture 3 32 / 39

Page 33: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Readers/Writers with condition synchronization -updating counters

We need code to update the counters

Reader: Writer:

< nr = nr + 1; > < nw = nw + 1; >

Read from DB Write to DB< nr = nr - 1; > < nw = nw - 1; >

Put conditions in front of the atomic actions to preserve the invariant.

Before increasing nr: (nw == 0)

Before increasing nw: (nr == 0 and nw == 0)

INF4140 (14.09.11) Semaphores Lecture 3 33 / 39

Page 34: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Readers/Writers with condition synchronization -without semaphores

int nr = 0, nw = 0;

## RW: (nr == 0 or nw == 0 ) and nw <= 1

process Reader [i=1 to M] {

while (true) {

...

< await (nw == 0)

nr = nr + 1; >

Read from DB

< nr = nr - 1; >

}

}

process Writer [i=1 to N] {

while (true) {

...

< await (nr == 0 and nw == 0)

nw = nw + 1; >

Write to DB

< nw = nw - 1; >

}

}

INF4140 (14.09.11) Semaphores Lecture 3 34 / 39

Page 35: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Readers/Writers with condition synchronization -converting to split binary semaphores

Implementation of await-statements may be done by split binarysemaphores.

May be used to implement di�erent synchronization problems withdi�erent guards B1, B2...

Use an entry-semaphore (e) initialized to 1

For each guard Bi : associate one counter and one delay-semaphore,both initialized to 0

Semaphore: delay the processes waiting for Bi

Counter: count the number of processes waiting for Bi

For the readers/writers problem, we need three semaphores and twocounters:

sem e = 1;

sem r = 0; int dr = 0; # condition reader: nw == 0

sem w = 0; int dw = 0; # condition writer: nr == 0 and nw == 0

INF4140 (14.09.11) Semaphores Lecture 3 35 / 39

Page 36: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Readers/Writers with condition synchronization -converting to split binary semaphores (2)

e, r and w form a split binary semaphore.

All execution paths starts with a P-operation and ends with aV-operation → Mutex

we need a signal mechanism SIGNAL to pick which semaphore tosignal.

SIGNAL must make sure the invariant holds

Bi holds when a process enters CR because either:

the process checksthe process is only signaled if Bi holds

Avoid deadlock by checking the counters before the delay semaphoresare signaled.

r is not signalled (V(r)) unless there is a delayed readerw is not signalled (V(w)) unless there is a delayed writer

INF4140 (14.09.11) Semaphores Lecture 3 36 / 39

Page 37: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Readers/Writers with condition synchronization -with split binary semaphores

int nr = 0, nw = 0; int dr = 0; int dw = 0;

sem e = 1; sem r = 0; sem w = 0;

# RW: (nr == 0 ∨ nw == 0 ) ∧ nw <= 1

process Reader [i=1 to M] { # Entry condition: nw == 0

while (true) {

...

# <await (nw == 0) nr = nr + 1;>

P(e); if (nw>0) { dr=dr+1; V(e); P(r);}

nr=nr+1; SIGNAL;

Read from DB

# < nr = nr - 1; >

P(e); nr=nr-1; SIGNAL

}

}

INF4140 (14.09.11) Semaphores Lecture 3 37 / 39

Page 38: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Readers/Writers with condition synchronization -with split binary semaphores (2)

process Writer [i=1 to N] {

# Entry condition: nw == 0 and nr == 0

while (true) {...

# <await (nr == 0 and nw == 0) nw = nw + 1; >

P(e); if (nr > 0 or nw > 0)

{ dw=dw+1; V(e); P(w);}

nw = nw + 1; SIGNAL;

Write to DB

# < nw = nw - 1; >

P(e); nw = nw - 1; SIGNAL;

}

}

INF4140 (14.09.11) Semaphores Lecture 3 38 / 39

Page 39: Semaphores - Forsiden - Universitetet i Oslo · capacity might be a problem INF4140 (14.09.11) Semaphores Lecture 3 17 / 39. ... Example: Producer/consumer with increased bu er capacity

Example: Readers/Writers with condition synchronization -with split binary semaphores (3)

SIGNAL

if (nw == 0 and dr > 0) {

dr = dr -1; V(r); # awaken reader

}

elseif (nr == 0 and nw == 0 and dw > 0) {

dw = dw -1; V(w); # awaken writer

}

else

V(e); # release entry lock

INF4140 (14.09.11) Semaphores Lecture 3 39 / 39


Recommended