Monitor or Semaphore

advertisement
HW#3: Dining Philosopher Problem
Due: March 27
Later homework penalty= X * 5%, X is the delay in days.
C/C++ programmer: using pthread semaphore
Java programmer: using java monitor
Description: You will implement a deadlock free solution for dining philosopher
problem. Your main thread will ask how many philosophers are going to participate this
fun experiment and the number of time he will eat (N). Each philosopher will be
represented by one thread and has the following behavior:
Loop (N times){
LOG(“thread I hungry”);
dp.pickup(i)
LOG(“thread I eating”);
eat…wait a random period of time…
dp.putdown(i)
wait a random period of time
}
Figure 1: Pi structure with monitor
All LOG information must be write in one log file.
Note 1
For Java programmer, the reference code is given in page 219. It is also scanned and
posted on the website.
Note 2
The semaphore based solution in page 210 (fig 7.17) is simple, but it will generate
deadlock. If your implementation is based on this method, you will get at most 50%
points.
Note 3
For C/C++ programmer, since pthread don’t have monitor support, you will need to
modify the reference code by using semaphore. Here is some hint to do this:
 Use a mutex semaphore to guard the all call to pickup() and putdown()

Each condition variables can be replaced by a semaphore. The wait() and signal()
call of a condition variable is replaced by wait(s) and signal (s) of that semaphore.
A reference thread code structure will be like this:
Shared Semaphore mutex=1;
Loop (N times){
LOG(“thread I hungry”);
Wait(mutex);
pickup(i)
signal(mutex);
LOG(“thread I eating”);
eat…wait a random period of time…
wait(mutex)
putdown(i)
signal(mutex)
wait a random period of time
}
Figure 2: Pi structure using semaphore
Download