Question: #1788

CMSC 335 Homework 4 Complete Solution

1. (20 pts) For the following program, explain the interesting lines of code related to threads and explain the output of the application (do not show the output, just explain it).

You may experiment with the program using the attached source code by copying and pasting it into your IDE.

  1. public class TaskThreadDemo {
  2. public static void main (String args []) {
  3. String [] sa = {"a", "X", "+", "."};
  4. for (String s: sa) {
  5. Runnable ps = new PrintChar (s, 200);
  6. Thread ts = new Thread (ps, s);
  7. ts.start ();
  8. } // end for each character
  9. } // end main
  10. } // end class TaskThreadDemo

11 

  1. class PrintChar implements Runnable {
  2. String ch;
  3. int times;

15  

  1. public PrintChar (String c, int n) {
  2. ch = c;
  3. times = n;
  4. } // end constructor

20  

  1. public void run () {
  2. for (int i = 0; i < times; i++) {
  3. System.out.print (ch);
  4. } // end for loop
  5. } // end method run
  6. } // end class PrintChar
  1. (10 pts) What is changed if the method called on line 7, start(), is replaced with run()? Explain (of course).
  2. (10 pts) What is changed if the method Thread.yield() is added between lines 23 and 24? Explain.
  3. (10         pts)     Write              a          small               code    example          using               a          ReentrantLock             (no      more               than    10        lines).              How    do        you      guarantee               that     the       lock     is         released         when               your    code    finishes?
  4. (20 pts) The dining philosophers problem was invented by E. W. Dijkstra, a concurrency pioneer, to clarify the notions of deadlock and starvation freedom. Imagine five philosophers who spend their lives just thinking and feasting. They sit around a circular table with five chairs. The table has a big plate of rice. However, there are only five chopsticks (in the original formulation forks) available, as shown in the figure below. Each philosopher thinks. When he gets hungry, he sits down and picks up the two chopsticks/forks that are closest to him. If a philosopher can pick up both chopsticks, he can eat for a random amount of time. After a philosopher finishes eating, he puts down the chopsticks and again starts to think.  

 

  1. What is wrong with everybody doing the following - other than that the philosophers never get up from the table?
    1. think for a while
    2. get left chopstick
    3. get right chopstick
    4. eat for a while
    5. return left chopstick
    6. return right chopstick 7. return to 1
  2. How can the above be fixed to avoid deadlocks?

 

  1. (10 pts) Write a simple thread example that contains a loop that sleeps for 30 seconds. The loop should execute until a “shutdown” flag is set to true on the runnable object executing in the thread.

 

  1. (10 pts) From your code in the previous question, when the shutdown flag is set to true, will the thread exit immediately? What if it is in the sleep call? How can the thread be woken up immediately by another thread?

 

  1. (10         pts)     Describe         how     a          semaphore     can      be        used    to         act       like               a          Lock.               What               feature            does    a          semaphore     offer    over    a               Lock?              How    can      you      ensure            that     the       thread             that     asked               for       the       permit             first     will      get       the       permit             first     when               using      a          semaphore?              
Solution: #1769

CMSC 335 Homework 4 Complete Solution

DEADLOCK What if every philosopher sits down about the same time and picks up his left chopstick. In this case, all chopsticks are locked and none of the philosophers can successfully lock his right chopstick. As a result, we have a circular waiting (i.e., every philosopher waits for his right chopstick that is currently being locked by his right neighbor), and hence a deadlock occurs. STARV...
Tutormaster
Rating: A+ Purchased: 11 x Posted By: Tutormaster
Comments
Posted by: Tutormaster

Online Users