Parallel Programming Exercise Session 11 1 Outline 1

  • Slides: 20
Download presentation
Parallel Programming Exercise Session 11 1

Parallel Programming Exercise Session 11 1

Outline 1. Feedback: Assignment 10 2. Assignment 11 2

Outline 1. Feedback: Assignment 10 2. Assignment 11 2

Feedback: Assignment 10 3

Feedback: Assignment 10 3

Fine grained Locking 4

Fine grained Locking 4

Optimistic Locking 5

Optimistic Locking 5

Lazy Locking 6

Lazy Locking 6

Assignment 11 • Multisensor System. 7

Assignment 11 • Multisensor System. 7

Multisensor System 8

Multisensor System 8

Multisensor System 9

Multisensor System 9

Multisensor System Implement two versions of the senor data set: a) One blocking version

Multisensor System Implement two versions of the senor data set: a) One blocking version based on a readers-writers lock (Locked. Sensors. java). b) A lock-free version (Lock. Free. Sensors. java) Hints: • Before you implement the readers-writers lock based version, start with a simple locked version in order to understand. Then try a readers-writers lock but be aware that the Java-implementation does not give fairness guarantees. What can this imply? In any case, you have the code from the lecture slides presenting a fair RW-Lock implementation. • The lock-free implementation solutions does NOT rely on mechanisms such as Double-Compare- And. Swap. Also it does not rely on a lazy update mechanism. Somehow you have to make sure that with a single reference update you change all data at once. How? 10

Readers-writers lock 11

Readers-writers lock 11

Readers-writers lock 12

Readers-writers lock 12

Readers-writers lock 13

Readers-writers lock 13

Readers-writers lock in Java double read. Something() { reader. Writer. Lock. read. Lock(). lock();

Readers-writers lock in Java double read. Something() { reader. Writer. Lock. read. Lock(). lock(); try { double value = retrieve. Double. Value(); return value; } finally { reader. Writer. Lock. read. Lock(). unlock(); } } No fairness guarantees! Void write. Something(double new_value) { reader. Writer. Lock. write. Lock(). lock(); try { store. Double. Value(new_value); } finally { reader. Writer. Lock. write. Lock(). unlock(); } } 14

Readers-writers lock with monitors 15

Readers-writers lock with monitors 15

Readers-writers lock with monitors 16

Readers-writers lock with monitors 16

Readers-writers lock with monitors 17

Readers-writers lock with monitors 17

Problems with locks 18

Problems with locks 18

Lock free 19

Lock free 19

Lock-free Object read. Something() { return atomic. Reference. get(); } Void write. Something(Object new_object)

Lock-free Object read. Something() { return atomic. Reference. get(); } Void write. Something(Object new_object) { Object old_object; do { old_object = atomic. Reference. get(); // Check if we want to overwrite the latest data (i. e. only write newer or better data) if ( … ) { return; } } while (!atomic. Reference. compare. And. Set(old_object, new_object)); } 20