coarse-grained and fine-grained...

78
Coarse-grained and fine-grained locking Niklas Fors 2013-12-05 Art of Multiprocessor Programming 1 Slides borrowed from: http://cs.brown.edu/courses/cs176course_information.shtml

Upload: others

Post on 20-Mar-2020

27 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Coarse-grained and fine-grained locking

Niklas Fors 2013-12-05

Art of Multiprocessor Programming 1

Slides borrowed from: http://cs.brown.edu/courses/cs176course_information.shtml

Page 2: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Topics discussed

•  Coarse-grained locking – One lock

•  Fine-grained locking – More than one lock

Art of Multiprocessor Programming 2

Page 3: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 3

Abstract Data Types

•  Concrete representation:

•  Abstract Type: –  {a, b}

a b

Page 4: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 4

Abstract Data Types

•  Meaning of rep given by abstraction map

– S( ) = {a,b} a b

Page 5: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 5

Coarse-Grained Locking

a b d

Page 6: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 6

Coarse-Grained Locking

a b d

c

Page 7: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 7

honk!

Coarse-Grained Locking

a b d

c

Simple but hotspot + bottleneck

honk!

Page 8: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 8

Coarse-Grained Locking

•  Easy, same as synchronized methods –  “One lock to rule them all …”

Page 9: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 9

Coarse-Grained Locking

•  Easy, same as synchronized methods –  “One lock to rule them all …”

•  Simple, clearly correct – Deserves respect!

•  Works poorly with contention

Page 10: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 10

Fine-grained Locking

•  Requires careful thought •  Split object into pieces

– Each piece has own lock – Methods that work on disjoint pieces need

not exclude each other

Page 11: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 11

Hand-over-Hand locking

a b c

Page 12: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 12

Hand-over-Hand locking

a b c

Page 13: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 13

Hand-over-Hand locking

a b c

Page 14: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 14

Hand-over-Hand locking

a b c

Page 15: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 15

Hand-over-Hand locking

a b c

Page 16: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 16

Removing a Node

a b c d

remove(b)

Page 17: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 17

Removing a Node

a b c d

remove(b)

Page 18: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 18

Removing a Node

a b c d

remove(b)

Page 19: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 19

Removing a Node

a b c d

remove(b)

Page 20: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 20

Removing a Node

a b c d

remove(b)

Page 21: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 21

Removing a Node

a c d

remove(b) Why lock victim node?

Page 22: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 22

Concurrent Removes

a b c d

remove(c) remove(b)

Page 23: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 23

Concurrent Removes

a b c d

remove(b) remove(c)

Page 24: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 24

Concurrent Removes

a b c d

remove(b) remove(c)

Page 25: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 25

Concurrent Removes

a b c d

remove(b) remove(c)

Page 26: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 26

Concurrent Removes

a b c d

remove(b) remove(c)

Page 27: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 27

Concurrent Removes

a b c d

remove(b) remove(c)

Page 28: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 28

Concurrent Removes

a b c d

remove(b) remove(c)

Page 29: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 29

Concurrent Removes

a b c d

remove(b) remove(c)

Page 30: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 30

Concurrent Removes

a b c d

remove(b) remove(c)

Page 31: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 31

Uh, Oh

a c d

remove(b) remove(c)

Page 32: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 32

Uh, Oh

a c d

Bad news, c not removed

remove(b) remove(c)

Page 33: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 33

Hand-Over-Hand Again

a b c d

remove(b)

Page 34: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 34

Hand-Over-Hand Again

a b c d

remove(b)

Page 35: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 35

Hand-Over-Hand Again

a b c d

remove(b)

Page 36: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 36

Hand-Over-Hand Again

a b c d

remove(b) Found

it!

Page 37: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 37

Hand-Over-Hand Again

a b c d

remove(b) Found

it!

Page 38: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 38

Hand-Over-Hand Again

a c d

remove(b)

Page 39: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 39

Removing a Node

a b c d

remove(b) remove(c)

Page 40: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 40

Removing a Node

a b c d

remove(b) remove(c)

Page 41: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 41

Removing a Node

a b c d

remove(b) remove(c)

Page 42: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 42

Removing a Node

a b c d

remove(b) remove(c)

Page 43: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 43

Removing a Node

a b c d

remove(b) remove(c)

Page 44: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 44

Removing a Node

a b c d

remove(b) remove(c)

Page 45: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 45

Removing a Node

a b c d

remove(b) remove(c)

Page 46: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 46

Removing a Node

a b c d

remove(b) remove(c)

Page 47: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 47

Removing a Node

a b c d

Must acquire Lock for

b

remove(c)

Page 48: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 48

Removing a Node

a b c d

Waiting to acquire

lock for b

remove(c)

Page 49: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 49

Removing a Node

a b c d

Wait! remove(c)

Page 50: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 50

Removing a Node

a b d

Proceed to

remove(b)

Page 51: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 51

Removing a Node

a b d

remove(b)

Page 52: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 52

Removing a Node

a b d

remove(b)

Page 53: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 53

Removing a Node

a d

remove(b)

Page 54: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 54

Removing a Node

a d

Page 55: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 55

Remove method

public boolean remove(T item) { int key = item.hashCode(); Node pred, curr; try { … } finally { curr.unlock(); pred.unlock(); }}

Page 56: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 56

Remove method

public boolean remove(T item) { int key = item.hashCode(); Node pred, curr; try { … } finally { curr.unlock(); pred.unlock(); }}

Key used to order node

Page 57: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 57

Remove method

public boolean remove(T item) { int key = item.hashCode(); Node pred, curr; try { … } finally { currNode.unlock(); predNode.unlock(); }}

Predecessor and current nodes

Page 58: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 58

Remove method

public boolean remove(T item) { int key = item.hashCode(); Node pred, curr; try { … } finally { curr.unlock(); pred.unlock(); }}

Make sure locks released

Page 59: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 59

Remove method

public boolean remove(T item) { int key = item.hashCode(); Node pred, curr; try { … } finally { curr.unlock(); pred.unlock(); }}

Everything else

Page 60: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 60

Remove method

try { pred = head; pred.lock(); curr = pred.next; curr.lock(); … } finally { … }

Page 61: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 61

Remove method

try { pred = head; pred.lock(); curr = pred.next; curr.lock(); … } finally { … }

lock pred == head

Page 62: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

try { pred = head; pred.lock(); curr = pred.next; curr.lock(); … } finally { … }

Art of Multiprocessor Programming 62

Remove method

Lock current

Page 63: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

try { pred = head; pred.lock(); curr = pred.next; curr.lock(); … } finally { … }

Art of Multiprocessor Programming 63

Remove method

Traversing list

Page 64: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

while (curr.key <= key) { if (item == curr.item) { pred.next = curr.next; return true; } pred.unlock(); pred = curr; curr = curr.next; curr.lock(); } return false;

Art of Multiprocessor Programming 64

Remove: searching

Page 65: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

while (curr.key <= key) { if (item == curr.item) { pred.next = curr.next; return true; } pred.unlock(); pred = curr; curr = curr.next; curr.lock(); } return false;

Art of Multiprocessor Programming 65

Remove: searching

Search key range

Page 66: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

while (curr.key <= key) { if (item == curr.item) { pred.next = curr.next; return true; } pred.unlock(); pred = curr; curr = curr.next; curr.lock(); } return false;

At start of each loop: curr and pred locked

Art of Multiprocessor Programming 66

Remove: searching

Page 67: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

while (curr.key <= key) { if (item == curr.item) { pred.next = curr.next; return true; } pred.unlock(); pred = curr; curr = curr.next; curr.lock(); } return false;

Art of Multiprocessor Programming 67

Remove: searching

If item found, remove node

Page 68: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

while (curr.key <= key) { if (item == curr.item) { pred.next = curr.next; return true; } pred.unlock(); pred = curr; curr = curr.next; curr.lock(); } return false;

Art of Multiprocessor Programming 68

Remove: searching Unlock predecessor

Page 69: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

while (curr.key <= key) { if (item == curr.item) { pred.next = curr.next; return true; } pred.unlock(); pred = curr; curr = curr.next; curr.lock(); } return false;

Art of Multiprocessor Programming 69

Remove: searching

demote current

Page 70: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

while (curr.key <= key) { if (item == curr.item) { pred.next = curr.next; return true; } pred.unlock(); pred = currNode; curr = curr.next; curr.lock(); } return false;

Art of Multiprocessor Programming 70

Remove: searching

Find and lock new current

Page 71: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

while (curr.key <= key) { if (item == curr.item) { pred.next = curr.next; return true; } pred.unlock(); pred = currNode; curr = curr.next; curr.lock(); } return false;

Art of Multiprocessor Programming 71

Remove: searching

Lock invariant restored

Page 72: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 72

Remove: searching

while (curr.key <= key) { if (item == curr.item) { pred.next = curr.next; return true; } pred.unlock(); pred = curr; curr = curr.next; curr.lock(); } return false;

Otherwise, not present

Page 73: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 73

Why does this work?

•  To remove node e – Must lock e – Must lock e’s predecessor

•  Therefore, if you lock a node –  It can’t be removed – And neither can its successor

Page 74: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 74

Adding Nodes

•  To add node e – Must lock predecessor – Must lock successor

•  Neither can be deleted

Page 75: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 75

Same Abstraction Map

•  S(head) = { x | there exists a such that

• a reachable from head and • a.item = x

}

Page 76: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 76

Rep Invariant

•  Easy to check that –  tail always reachable from head – Nodes sorted, no duplicates

Page 77: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 77

Drawbacks

•  Better than coarse-grained lock – Threads can traverse in parallel

•  Still not ideal – Long chain of acquire/release –  Inefficient

Page 78: Coarse-grained and fine-grained lockingfileadmin.cs.lth.se/cs/Education/EDA015F/2013/Herlihy4-5-presentation.pdf · Topics discussed • Coarse-grained locking – One lock • Fine-grained

Art of Multiprocessor Programming 79

This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.

•  You are free: –  to Share — to copy, distribute and transmit the work –  to Remix — to adapt the work

•  Under the following conditions: –  Attribution. You must attribute the work to “The Art of

Multiprocessor Programming” (but not in any way that suggests that the authors endorse you or your use of the work).

–  Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under the same, similar or a compatible license.

•  For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to –  http://creativecommons.org/licenses/by-sa/3.0/.

•  Any of the above conditions can be waived if you get permission from the copyright holder.

•  Nothing in this license impairs or restricts the author's moral rights.