CSCI.6961 Distributed Computing over the Internet

Spring, 2002

Programming Assignment 3

This project is to be done either individually or in pairs. Do not show your code to any other group and do not look at any other group's code. Do not put your code in a public directory or otherwise make it public. However, you may get all the help you need from the TA or the instructor. You are encouraged to use the WebCT Discussions page, or to post problems so that other students can also see the answers.

The goal of this assignment is to become more familiar with JOCAML by implementing a solution to a familiar problem.  PA2 required the coding of a solution to the dining philosophers problem in PICT, but all processing was done locally.  For this assignment, you must implement a solution to the dining philosophers problem in JOCAML, using two different locations.  One location should be the table; the other, a lounge.  Philosophers may ONLY eat at the table, and may ONLY think in the lounge.  Any solution which prevents deadlock is an acceptable algorithm, as long as it is possible for all philosophers to both eat and think at some point.

JOCAML is available on the CS servers at /projects/dci2002/jocaml/, and the binaries can be found at /projects/dci2002/bin/. The distribution file is at /projects/dci2002/jocaml-beta.tar, or available for download as linked off the course web (here). The distribution includes OCAML, so no additional download is necessary.

As always, if you wish to work together as a group or earn extra credit, you must complete one or more extensions.  Remember, if you can think of any project extension you wish to do but which isn't mentioned here, consult either the professor or the TA.  Possible extensions include:

Grading will be split in the following way: Submission:

The due date for this project is March 28th, 2002, 11:55pm EST. You should use the assignments drop-off box located at the course's WebCT page. Upload a JAR, ZIP, or tar.gz file containing all the relevant documented source files, along with a README file describing the project and its usage.  The README should clearly describe how to compile and run the code, as well as explaining your architecture and any design decisions made.