linked lists the role of locking - uni-muenchen.de · linked lists –the role of locking,...

39
Clara Lüling, Stephan Bittner Linked Lists The Role of Locking Verkettete Liste - Die Rolle des Sperrens

Upload: others

Post on 20-Jul-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Clara Lüling, Stephan Bittner

Linked Lists – The Role of Locking

Verkettete Liste - Die Rolle des Sperrens

Page 2: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Gliederung

Linked Lists – The Role of Locking, 27.05.2010 1

Linked Lists – The Role of Locking

1. Verkettete Listen2. Algorithmen

1. Coarse-Grained Synchronization2. Fine-Grained Synchronization3. Optimistic Synchronization4. Lazy Synchronization5. Non-Blocking Synchronization

3. Abschließender Vergleich

Page 3: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Verkettete Listen

Linked Lists – The Role of Locking, 27.05.2010 2

Funktionsschema

• Eine verkettete Liste besteht aus miteinander verlinkten Knoten (Nodes):

Head Tail

Page 4: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Verkettete Listen

Linked Lists – The Role of Locking, 27.05.2010 3

Listen-Element Node

Ein Node enthält:• das eigentliche Objekt (item)• den Hashcode des Objekts als Key (key)• eine Referenz auf den nachfolgenden Knoten (next)

Ausnahme: head und tail sind sog. sentinel nodes: sie enthalten kein Objekt

Page 5: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Verkettete Listen

Linked Lists – The Role of Locking, 27.05.2010 4

Manipulationsmethoden

Page 6: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Verkettete Listen

Linked Lists – The Role of Locking, 27.05.2010 5

ManipulationsmethodenEinfügen in List: add(b)

Entfernen von Knoten: remove(b)

Prüfung ob bereits vorhanden: contains(b)

a b c

pred currhead tail

a

b

c

pred currhead tail

a b c

Page 7: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 6

AlgorithmenCoarse-Grained Synchronization

• Fine-Grained Synchronization• Optimistic Synchronization• Lazy Synchronization• Non-Blocking Synchronization

Page 8: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 7

kritischer

BereichLockCoarse-Grained Synchronization

Page 9: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 8

Coarse-Grained Synchronization

• Zugriff auf die Liste durch Lock der gesamten Liste• Resultat: sequentielle Ausführung der Threads• Vorteile: Algorithmus arbeitet korrekt• Nachteil: nur ein Zugriff gleichzeitig auf die Liste sinnvoll nur bei wenigen nebenläufigen Threads, sonst hohe Wartezeiten

Wie können wir mehreren Threads gleichzeitig den Zugriff auf die Liste ermöglichen?

Page 10: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 9

Algorithmen• Course-Grained Synchronization

Fine-Grained Synchronization• Optimistic Synchronization• Lazy Synchronization• Non-Blocking Synchronization

Page 11: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 10

Fine-Grained Synchronization

Page 12: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 11

Fine-Grained Synchronization: Warum zwei Locks (pred und curr)?

a b

a b c

c

head

head

tail

tail

Thread A löscht a, B zur selben Zeit b. Was passiert?

Lösung: es müssen jeweils pred und curr gelockt werden.

Page 13: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 12

Fine-Grained Synchronization: Deadlock

a

cb

Thread A will Knoten a einfügen.Thread B will Knoten b löschen.

Möglicher Ablauf:A sichert bB sichert headA möchte head sichern: besetzt B möchte b sichern: besetzt Deadlock!

head

tail

Warum besteht hier Deadlock-Gefahr?

currA, currBpredA, predB

Page 14: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 13

Fine-Grained Synchronization

• Jeder Knoten ist durch einen eigenen Lock gesichert• Nachteile:

• Gefahr eines Deadlocks• Bei jedem Knoten muss die Freigabe angefordert werden

Wie können wir verhindern, dass auch nicht gesuchte Knoten gelockt werden müssen?

Page 15: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 14

Algorithmen• Course-Grained Synchronization • Fine-Grained Synchronization

Optimistic Synchronization• Lazy Synchronization• Non-Blocking Synchronization

Lazy-Algorithmen

Page 16: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 15

Optimistic Synchronization

Page 17: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 16

Optimistic Synchronization

Page 18: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 17

Optimistic Synchronization

Page 19: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 18

Optimistic Synchronization: Warum validate() ?

… a

predA

currA

Thread A will a löschen.Während A die Liste durchquert, löscht Thread B alle Knoten von curr bis a.

head tail

A löscht trotzdem Knoten a.Lösung: validate() checkt, ob a von head aus erreichbar ist.

Page 20: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 19

Optimistic Synchronization

• Lock() erst, wenn gesuchter Key gefunden wurde• Abschließend validate()• Nur optimal, wenn: (Kosten für 2maliges Durchgehen der Liste) < < (Kosten für einmaliges Durchgehen der Liste mit Fine-grained Synchronisation)• Nachteile: o Threads können verhungerno auch die contains()-Methode muss Knoten entsperren

Wie können wir verhindern, dass contains()-Calls warten müssen (wait-free)?

Page 21: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 20

Algorithmen• Coarse-Grained Synchronization • Fine-Grained Synchronization• Optimistic Synchronization

Lazy Synchronization• Non-Blocking Synchronization

Lazy-Algorithmen

Page 22: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 21

Lazy Synchronization

Page 23: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 22

Lazy Synchronization

Page 24: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 23

Lazy Synchronization

Page 25: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 25

Lazy Synchronization: Warum validate() ?

predA currA

predA currA

0 1 0 0

0 0

0

0 0

head

head

tail

tail

Ablauf:Thread A erreicht gesuchten Knoten.

Ablauf:Thread A erreicht gesuchten Knoten. Neuer Knoten wird von anderem Thread eingefügt.-> validate() weist A auf dieses Problem hin -> remove()-Call von A wird neu gestartet

Knoten predA wird von anderem Thread gelöscht.-> validate() weist A auf dieses Problem hin

a

a

Page 26: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 26

Lazy Synchronization

• Sorgt dafür, dass contains()-Anfragen nicht warten müssen:• Remove()-Methode ist „lazy“ und löscht in 2 Schritten:

o setzt marked-field des Knotens auf trueo ersetzt anschließend den Zeiger auf den Knoten durch den auf den nachfolgenden Knoten.

• Contains()-Aufruf gibt nun false zurück, wenn Knoten nicht vorhanden oder „markiert“ ist keine Locks mehr nötig• Nachteil: add()- und remove()-Aufrufe können sich gegenseitig blockieren

Page 27: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 27

Algorithmen• Coarse-Grained Synchronization • Fine-Grained Synchronization• Optimistic Synchronization• Lazy Synchronization

Non-Blocking SynchronizationLazy-Algorithmen

Page 28: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 28

Non-Blocking Synchronization

Page 29: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 29

Non-Blocking Synchronization

Page 30: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 30

Non-Blocking Synchronization

Page 31: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 31

Non-Blocking Synchronization

Page 32: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 32

Non-Blocking Synchronization

Page 33: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 33

Non-Blocking Synchronization

Page 34: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 34

Non-Blocking Synchronization

Page 35: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 35

Non-Blocking Synchronization: Grund für atomare Änderung

ca

b

a b c

Thread A ruft compareAndSet() für head.next aufThread B ruft gleichzeitig compareAndSet() für a.next auf b wird nicht in die Liste eingefügt

Thread A ruft compareAndSet() für head.next aufThread B ruft gleichzeitig compareAndSet() für a.next auf b wird nicht gelöscht

A: remove(a)

B: add(b)

B: remove(b)A: remove(a)

head

head

tail

tail

Page 36: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Algorithmen

Linked Lists – The Role of Locking, 27.05.2010 36

Non-Blocking Synchronization

• CompareAndSet()-Calls allein nicht ausreichend für korrekte Ausführung• Next- und marked-field müssen wie ein Feld behandelt werden (AtomicMarkableReference<T>)stellt sicher, dass ein Knoten nicht geändert wird, nachdem er phys. oder log. gelöscht wurde

• Vorteil: weniger willkürliche Wartezeiten• Nachteil: Aufwandkosten für Ermöglichung der atomaren Änderung und einen Boolean Wert

Page 37: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Abschließender Vergleich

Linked Lists – The Role of Locking, 27.05.2010 38

Vergleich

Coarse-Grained Fine-Grained Optimistic Lazy Non-Blocking

Single Locksequentielle parallel

Lock bei jedem Lock von relevantenKnoten Knoten

contains() Marked – fieldbenötigt Locks

Kein Locking:compareAndSet() +atomares Ändern

Page 38: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Linked Lists – The Role of Locking

Linked Lists – The Role of Locking, 27.05.2010

Fragen ?

Page 39: Linked Lists The Role of Locking - uni-muenchen.de · Linked Lists –The Role of Locking, 27.05.2010 12 Fine-Grained Synchronization: Deadlock a b c Thread A will Knoten a einfügen

Linked Lists – The Role of Locking

Linked Lists – The Role of Locking, 27.05.2010

Vielen Dank für eure Aufmerksamkeit!