Description
Aim
This assignment aims to give you experience in thread (and, by extension, process) synchronization using semaphores. In this project, you will write multithreaded programs in Java to solve three classic synchronization problems, using only semaphores. A secondary aim is to give you experience in reading, understanding and correcting existing code. The assignment is in three parts, increasing in difficulty. The second part is described below.
Part II: Dish washing with semaphores
In this simulation, you will correctly implement a simple simulation of dish-washing in a kitchen. There are two roles: washer and dryer, with a shared rack between them for the wet dishes. The washer washes dishes one-by-one, adding them to the rack for drying. The dryer removes the wet dishes from the rack one-by-one to dry them.
There are several synchronization constraints to enforce to make this system work correctly:
-
Only one person should access the shared rack at any point.
-
When the rack is empty, the dryer must wait.
-
When the rack is full, the washer must wait.
-
The dryer cannot dry a dish before the washer has washed it.
1.1 Code skeleton: dishWashS
You must use and extend the dishWashS package provided, correctly implementing the WetDishRack class (and all the methods), so that the CleaningDishes class will execute correctly, always. Do not alter the CleaningDishes or the Dryer and Washer thread classes in the package (although you must submit them). You will need to inspect the various classes to see how they work – this is part of the assignment and no explanation other than the code will be given.
An example of a correct execution of CleaningDishes is:
—Washer is washing dish #1
—Washer added dish #1 to rack.
—Dryer removed dish #1 from rack
—Washer is washing dish #2
—Washer added dish #2 to rack.
—Washer is washing dish #3
—Washer added dish #3 to rack.
—Washer is washing dish #4
—Washer added dish #4 to rack.
—Washer is washing dish #5
—Dryer is done with dish #1
—Dryer removed dish #2 from rack
—Washer added dish #5 to rack.
—Washer is washing dish #6
—Dryer is done with dish #2
—Dryer removed dish #3 from rack
—Washer added dish #6 to rack.
—Washer is DONE.
—Dryer is done with dish #3
—Dryer removed dish #4 from rack
—Dryer is done with dish #4
—Dryer removed dish #5 from rack
—Dryer is done with dish #5
—Dryer removed dish #6 from rack
—Dryer is done with dish #6
—Dryer is DONE.
1 Code requirements
You will code your solutions in Java, adding to the skeleton code provided.
You may only use the Semaphore class in the java.util.concurrent library:
no other Java synchronization constructs at all.
All code must be deadlock free.
The output must comply with the stated synchronization constraints and with the examples shown.
-
Assignment submission requirements and assessment rules
-
-
You will need to create, regularly update, and submit a GIT archive of your code for each separate part (i.e. one archive for Part I, one for Part II and one for Part III).
-
You are required to extend the provided code templates. If you fail to do this (i.e. submit alternative code), you will obtain a mark of 0 for the assignment.
-
-
-
Each submission archive must include a Makefile and README file (including running/installation instructions ) for compilation/running.
-
-
-
Label your assignment archive with your student number and the assignment number e.g. KTTMIC004_CSC3002S_OS2_PartI
-
-
-
Upload the files and then check that they are uploaded. It is your responsibility to check that the uploaded file is correct, as mistakes cannot be corrected after the due date.
-
-
The deadline for marking queries on your assignment is one week after the return of your mark. After this time, you may not query your mark.
-
Note well: submitted code that does not run or does not pass standard test cases will result in a mark of zero.
-
Any plagiarism, academic dishonesty, or falsifying of results reported will get a mark of 0 and be submitted to the university court.
.