CSSE7610 Concurrency: Theory and Practice SEMESTER TWO FINAL EXAMINATION 2021
Hello, dear friend, you can consult us at any time if you have any questions, add WeChat: daixieit
CSSE7610
Concurrency: Theory and Practice
SEMESTER TWO FINAL EXAMINATION 2021
Question 1 (15 marks)
The algorithm below attempts to solve the critical section problem for two threads, p and q. Remember the assumption of the critical section problem that the critical section must progress, and the non-critical section need not progress.
Solving critical section problem |
|
enum{N, P, Q} integer g1 ← N, g2 ← N |
|
p |
q |
loop forever p1: non-critical section p2: g1 ← P p3: if g2 N goto p2 p4: g2 ← P p5: if g1 P p6: if g2 P goto p2 p7: critical section p8: g2 ← N |
loop forever q1: non-critical section q2: g1 ← Q q3: if g2 N goto q2 q4: g2 ← Q q5: if g1 Q q6: if g2 Q goto q2 q7: critical section q8: g2 ← N |
(i) Prove that the algorithm ensures mutual exclusion. If you require any invariants in your proof, they must appear as lemmas and also be proved. (6 marks)
(ii) Is the following formula an invariant: p6 ∧ (g1 = P) ⇒ ¬(q4 ^ q5 ^ q7). If yes, prove it; otherwise, give a fragment of the state diagram as a counterexample (4 marks)
(iii) Use Linear Temporal Logic (LTL) to state the starvation freedom in this algorithm. Does the algorithm satisfy this property? If yes, prove it; otherwise, give a fragment of the state diagram as a counterexample. (5 marks)
Question 2 (10 marks)
(Spaghetti Sauce Chefs Problem) Consider a scenario with three chef processes and one supplier process. Each chef loops forever, first waiting for ingredients and then making spaghetti sauce. The ingredients are meat, oil and salt. One of the chefs has infinite amount of meat, another has infinite amount of oil and the third has infinite amount of salt. The supplier has infinite amount of all three ingredients.
The supplier repeatedly places two different ingredients at random on the table. The chef who has the complementary ingredient then picks up them and makes sauce. For example, if the supplier puts out meat and salt, the chef who has the oil will pick up both ingredients.
(i) First, assume the supplier notifies the chef who has the complementary ingredient. Solve this synchronisation problem with semaphores. Any semaphore used must be a weak semaphore, i.e., the processes blocked on the semaphore are in a set, not a queue. Use language-independent notation. Clearly state your assumptions if any. (4 marks)
(ii) Now, the following restriction is imposed: the supplier does not notify the chef who has the complementary ingredient. Solve this problem with semaphores. Any semaphore used must be a weak semaphore, i.e., the processes blocked on the semaphore are in a set, not a queue. Use language-independent notation. Your solution must be deadlock-free. Clearly state your assumptions if any. (6 marks)
1 // Java code for thread execution
2 public class Multithreading {
3 class Control {
4 public volatile int total = 0; 5 }
6
7 final Control control = new Control();
8
9 Class T implements Runnable {
10 @Override
11 //thread function
12 public void run() 13 {
14 int i = 0;
15 //sum calculation
16 for (i = 0; i < 20000; i++) {
17 control .total++; 18 }
19 }
20
21 public static void main(String[] args) throws Interrupted Exception 22 {
23 try{
24 int n = 6;
25 for (int i = 0; i < n; i++) {
26 Multithreading object = new Multithreading();
27 ...
28 object .start(); 29 }
30 System .out .println("The final result of total is " + control .total); 31 }
32 }
33 }
34 }
1. How many threads are created in this multithreading program? (2 marks)
2. Will the variable total (on line 30) be printed out correctly? (3 marks)
3. Explain the reason why it can be printed out correctly/incorrectly. If the final result of variable total is incorrect, please write a pseudo-code to correct the code.
Note that you do not have to give the detailed implementation of wait()/waitC(), signal()/signalC() (8 marks)
Question 4 (12 marks)
Danielle is writing a concurrent program to operate a shared linked list data structure. To achieve mutual exclusion, she selects to use fine-grained synchronization to synchronize the access to objects. By following the standard implementation of fine-grained synchronisation as we introduced in the lecture, Danielle implements the data structure of each node and function add() as below. Unfortunately, she implements an incorrect hashcode generator which causes the hashcode of each node to not be unique.
1 // Data structure of each node
2 public class Node<T> {
3 T item;
4 int key;
5 Node<T> next; 6 }
1 // Standard fine-grained sychronization - add
2 public boolean add (T item){
3 Node<T> pred, curr;
4 int key = item .hashCode();
5 head .lock();
6 try {
7 pred = head; curr = pred .next;
8 curr .lock();
9 try {
10 while (curr .key < key) {
11 pred .unlock();
12 pred = curr; curr = curr .next;
13 curr .lock(); 14 }
15 if(key == cyrr .key) {
16 return false ;
17 }
18 Node<T> newNode = new Node<T>(item);
19 pred .next = newNode;
20 newNode .next = curr;
21 return true ; 22 }
23 finally {
24 curr .unlock(); 25 }
26 }
27 finally {
28 pred .unlock(); 29 }
30 }
Please help Danielle fix this issue by answering the following questions.
1. Please explain what issue might be caused if the hashcode of each node is not unique. (2 marks)
2. Please modify the data structure and the add() function to resolve this issue. (7 marks)
3. Referring to your modification, please explain why the issue is solved. (3 marks)
Question 5 (0 marks)
Please specify any assumptions you have made in completing this examination and which questions those assumptions relate to. You may also include queries you may have made with respect to a particular question, should you have been able to ‘raise your hand’ in an examination room.
2022-12-05