66
More on Semaphores More on Semaphores Andy Wang Andy Wang Operating Systems Operating Systems COP 4610 / CGS 5765 COP 4610 / CGS 5765

More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Embed Size (px)

Citation preview

Page 1: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

More on SemaphoresMore on Semaphores

Andy WangAndy Wang

Operating SystemsOperating Systems

COP 4610 / CGS 5765COP 4610 / CGS 5765

Page 2: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

The Pigeon Network ScenarioThe Pigeon Network Scenario

Pigeons are good message carriersPigeons are good message carriersReasonably reliableReasonably reliableRelatively fast for less developed rural areasRelatively fast for less developed rural areasCan sense magnetic field linesCan sense magnetic field lines

Page 3: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Here is the Story…Here is the Story…

There are two towns—Mars and VenusThere are two towns—Mars and VenusMars has all male pigeonsMars has all male pigeonsVenus has all female pigeonsVenus has all female pigeons

Each town delivers messages to the otherEach town delivers messages to the otherBy sending a pigeon through the shared flying By sending a pigeon through the shared flying

pathpathAnd waiting for the same pigeon to fly back as And waiting for the same pigeon to fly back as

an acknowledgementan acknowledgement

Page 4: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Here is the Story…Here is the Story…

Based on experienceBased on experienceWhenever both towns send messages Whenever both towns send messages

simultaneously, the reliability drops simultaneously, the reliability drops significantlysignificantly

Pigeons of opposite genders decide to take Pigeons of opposite genders decide to take excursions excursions

Goals of a pigeon network:Goals of a pigeon network:EfficiencyEfficiencyFairnessFairness

Page 5: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Developing the SolutionDeveloping the Solution

Can we map it to already solved Can we map it to already solved problems?problems?

Standard synchronization problems:Standard synchronization problems:Bounded buffer (producers and consumers)Bounded buffer (producers and consumers)Fairness (readers and writers)Fairness (readers and writers)Resource allocation (dining philosophers)Resource allocation (dining philosophers)

Pigeon network is under the reader-writer Pigeon network is under the reader-writer categorycategory

Page 6: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Step 1: VisualizationStep 1: Visualization

Identify Identify Shared resourcesShared resourcesScope of shared resourcesScope of shared resources

Mars Venus

flying path

Page 7: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Step 1: VisualizationStep 1: Visualization

Identify Identify Shared resource: flying pathShared resource: flying pathScope of the shared resource: global Scope of the shared resource: global

Mars Venus

flying path

Page 8: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Simplest ImplementationSimplest Implementation

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);

// send the message// send the message

V(flyingPath);V(flyingPath);

P(flyingPath);P(flyingPath);

// send the message// send the message

V(flyingPath);V(flyingPath);

Mars Venus

flying path

Page 9: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Simplest ImplementationSimplest Implementation

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);

// send the message// send the message

V(flyingPath);V(flyingPath);

P(flyingPath);P(flyingPath);

// send the message// send the message

V(flyingPath);V(flyingPath);

Mars Venus

flying path

Page 10: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Simplest ImplementationSimplest Implementation

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);

// send the message// send the message

V(flyingPath);V(flyingPath);

P(flyingPath);P(flyingPath);

// send the message// send the message

V(flyingPath);V(flyingPath);

Mars Venus

flying path

something you don’t see everyday…

Page 11: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Simplest ImplementationSimplest Implementation

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);

// send the message// send the message

V(flyingPath);V(flyingPath);

P(flyingPath);P(flyingPath);

// send the message// send the message

V(flyingPath);V(flyingPath);

Mars Venus

flying path

Page 12: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Simplest ImplementationSimplest Implementation

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);

// send the message// send the message

V(flyingPath);V(flyingPath);

P(flyingPath);P(flyingPath);

// send the message// send the message

V(flyingPath);V(flyingPath);

Mars Venus

flying path

Page 13: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Simplest ImplementationSimplest Implementation

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);

// send the message// send the message

V(flyingPath);V(flyingPath);

P(flyingPath);P(flyingPath);

// send the message// send the message

V(flyingPath);V(flyingPath);

Mars Venus

flying path

Page 14: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Simplest ImplementationSimplest Implementation

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);

// send the message// send the message

V(flyingPath);V(flyingPath);

P(flyingPath);P(flyingPath);

// send the message// send the message

V(flyingPath);V(flyingPath);

Mars Venus

flying path

Page 15: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Simplest ImplementationSimplest Implementation

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);

// send the message// send the message

V(flyingPath);V(flyingPath);

P(flyingPath);P(flyingPath);

// send the message// send the message

V(flyingPath);V(flyingPath);

Mars Venus

flying path

Page 16: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Simplest ImplementationSimplest Implementation

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);

// send the message// send the message

V(flyingPath);V(flyingPath);

P(flyingPath);P(flyingPath);

// send the message// send the message

V(flyingPath);V(flyingPath);

Mars Venus

flying path

Page 17: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Simplest ImplementationSimplest Implementation

+ Simple+ Simple

+ Fair+ Fair

- Not efficient- Not efficientOnly one pigeon can fly at a timeOnly one pigeon can fly at a timeVenusians love to fly in groups… Venusians love to fly in groups…

Page 18: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in TransitTransit

Resources and scopes: flying path Resources and scopes: flying path (global), a counter for Venusians in transit (global), a counter for Venusians in transit (Venus)(Venus)

Mars Venus

flying path

Page 19: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in TransitTransit

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

int VenusiansInTransit = 0;int VenusiansInTransit = 0;

++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}

// send the message// send the message

--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}

Mars Venus

flying path

Page 20: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in TransitTransit

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

int VenusiansInTransit = 0;int VenusiansInTransit = 0;

++VenusiansInTransit; // == 1++VenusiansInTransit; // == 1if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}

// send the message// send the message

--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}

Mars Venus

flying path

Page 21: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in TransitTransit

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

int VenusiansInTransit = 0;int VenusiansInTransit = 0;

++VenusiansInTransit; // == 2++VenusiansInTransit; // == 2if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}

// send the message// send the message

--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}

Mars Venus

flying path

Page 22: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in TransitTransit

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

int VenusiansInTransit = 0;int VenusiansInTransit = 0;

++VenusiansInTransit; // == 2++VenusiansInTransit; // == 2if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}

// send the message// send the message

--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}

Mars Venus

flying path

Page 23: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in TransitTransit

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

int VenusiansInTransit = 0;int VenusiansInTransit = 0;

++VenusiansInTransit; // == 2++VenusiansInTransit; // == 2if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}

// send the message// send the message

--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}

Mars Venus

flying path

Page 24: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in TransitTransit

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

int VenusiansInTransit = 0;int VenusiansInTransit = 0;

++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}

// send the message// send the message

--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}

Mars Venus

flying path

Page 25: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in TransitTransit

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

int VenusiansInTransit = 0;int VenusiansInTransit = 0;

++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}

// send the message// send the message

--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}

Mars Venus

flying path

Page 26: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in TransitTransit

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

int VenusiansInTransit = 0;int VenusiansInTransit = 0;

++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}

// send the message// send the message

--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}

Mars Venus

flying path

Date? Sure.

Page 27: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit RevisedTransit Revised

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}

// send the message// send the message

--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 28: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit RevisedTransit Revised

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}

// send the message// send the message

--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 29: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit RevisedTransit Revised

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}

// send the message// send the message

--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 30: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit RevisedTransit Revised

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}

// send the message// send the message

--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Wait!

Page 31: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 32: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 33: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 34: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 35: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 36: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 37: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 38: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 39: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 40: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 41: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 42: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 43: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 44: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 45: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 46: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 47: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 48: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 49: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 50: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 51: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 52: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 53: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 54: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 55: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 56: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 57: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 58: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 59: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 60: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

semaphore flyingPath = 1;semaphore flyingPath = 1;

P(flyingPath);P(flyingPath);// send the message// send the messageV(flyingPath);V(flyingPath);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Mars Venus

flying path

Page 61: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians in Allowing Multiple Venusians in Transit Revised AgainTransit Revised Again

Efficient for VenusiansEfficient for VenusiansNot fair for MartiansNot fair for Martians

Page 62: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians and Allowing Multiple Venusians and Martians in TransitMartians in Transit

semaphore flyingPath = 1;semaphore flyingPath = 1;semaphore MartianLock = 1;semaphore MartianLock = 1;int MartiansInTransit = 0;int MartiansInTransit = 0;

P(MartianLock);P(MartianLock);++MartiansInTransit;++MartiansInTransit;if (MartiansInTransit == 1) {if (MartiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(MartianLock);V(MartianLock);// send the message// send the messageP(MartianLock);P(MartianLock);--MartiansInTransit;--MartiansInTransit;if (MartiansInTransit == 0) {if (MartiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(MartianLock);V(MartianLock);

semaphore VenusianLock = 1;semaphore VenusianLock = 1;int VenusiansInTransit = 0;int VenusiansInTransit = 0;

P(VenusianLock);P(VenusianLock);++VenusiansInTransit;++VenusiansInTransit;if (VenusiansInTransit == 1) {if (VenusiansInTransit == 1) {

P(flyingPath);P(flyingPath);}}V(VenusianLock);V(VenusianLock);// send the message// send the messageP(VenusianLock);P(VenusianLock);--VenusiansInTransit;--VenusiansInTransit;if (VenusiansInTransit == 0) {if (VenusiansInTransit == 0) {

V(flyingPath);V(flyingPath);}}V(VenusianLock);V(VenusianLock);

Page 63: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Allowing Multiple Venusians and Allowing Multiple Venusians and Martians in TransitMartians in Transit

Both sides can transmit efficientlyBoth sides can transmit efficientlyOne side can completely block off the One side can completely block off the

traffic from the other sidetraffic from the other sideFair, since both sides are equally selfish…Fair, since both sides are equally selfish…Fortunately, pigeons do sleepFortunately, pigeons do sleepDaily cycles will break a starvation Daily cycles will break a starvation

condition…condition…

Page 64: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Proving the CorrectnessProving the Correctness

Safety (mutual exclusion)Safety (mutual exclusion): : At most one thread is in the critical section at At most one thread is in the critical section at

any timeany timeAll necessary locks are acquired at the All necessary locks are acquired at the

entrance of a critical sectionentrance of a critical sectionAll shared resources are protectedAll shared resources are protected

Page 65: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765

Proving the CorrectnessProving the Correctness

Liveness (progress)Liveness (progress):: If more than one thread is interested in If more than one thread is interested in

executing the critical section, some processes executing the critical section, some processes will eventually do so (deadlock free)will eventually do so (deadlock free)

Fairness (bounded waiting)Fairness (bounded waiting)::Every thread that wants to execute the critical Every thread that wants to execute the critical

section will eventually do so (no starvation)section will eventually do so (no starvation)

Page 66: More on Semaphores Andy Wang Operating Systems COP 4610 / CGS 5765