Computer Science 330
Operating Systems

Spring 2012, Siena College

Lecture 10: Synchronization Problems
Date: Tuesday, February 21, 2012


Lecture Assignment 10

Due at the start of class, Thursday, February 23.

Please submit answers to these questions either as a hard copy (typeset or handwritten are OK) or by email to jteresco AT by the start of class. Please use a clear subject line when submitting by email (e.g., CS 330 Lecture Assignment 10, Joe Student). We will discuss these questions at the start of class, so no late submissions are accepted.

The Dining Savages. A tribe of savages eats communal dinners from a large pot that can hold M servings of stewed missionary. When a savage wants to eat, he helps himself from the pot, unless it is empty. If the pot is empty, the savage wakes up the cook and then waits until the cook has refilled the pot. The behavior of the savages and cook is defined by the following processes:

Savagei: while (1) { get serving from pot; eat; }
Cook: while (1) { sleep; put M servings in pot; }

Develop psuedocode (along the lines of the in-class Sleeping Barber solution) for the actions of the savages and the cook. Use semaphores for synchronization. The only operations permitted on the semaphores are initialization, wait, and signal. You may assume the semaphores are fair. Your solution should avoid deadlock and awaken the cook only when the pot is empty. You do not need to implement C code, just a list of shared variables and pseudocode describing the actions of the savages and the cook. (15 points)