/
Concurrency 2 Concurrency 2

Concurrency 2 - PowerPoint Presentation

kittie-lecroy
kittie-lecroy . @kittie-lecroy
Follow
409 views
Uploaded On 2017-03-20

Concurrency 2 - PPT Presentation

CS 2110 Spring 2016 Consistency x 2 y 3 a y gt 0 x 0 Systemoutprintln a Thread 1 Thread 2 x 1 y 1 What is printed 0 1 and 2 can be printed Consistency ID: 526791

thread volatile compareandset atomicinteger volatile thread atomicinteger compareandset return newvalue consistency atomic increment local atomicity variable concurrent implement java

Share:

Link:

Embed:

Download Presentation from below link

Download Presentation The PPT/PDF document "Concurrency 2" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

Slide1

Concurrency 2

CS 2110 – Spring 2016Slide2

Consistency

x = 2;

y = 3;

a = y > 0 ? x : 0;

System.out.println(a);

Thread 1

Thread 2

x = 1;y = -1;

What is printed?

0, 1, and 2 can be printed!Slide3

Consistency

Write 2 to x in local cache

Write 3 to y in local cache

3

gets pushed to y in memory2 gets pushed to x in memory

Read 3 from y in memory

Read 1

from x in memoryWrite 1 to aPrint 1Thread 1 on Core 1Thread 2 on Core 2Not sequentially consistent!Slide4

Harsh Reality

Sequential Consistency

There is an interleaving of the parallel operations that explains the observations and events

Currently unknown how to implement efficiently

Volatile keywordJava fields can be declared volatileWriting to a volatile variable ensures all local changes are made visible to other threadsx and y would have to be made volatile to fix codeSlide5

Atomicity

x++;

x++;

Thread 1

Thread 2

volatile

int

x = 0;What is the value of x?

Can be both 1 and 2!

volatile does not ensure atomicity!Slide6

java.util.concurrent.atomic

class

AtomicInteger

, AtomicReference<T>, …

Represents a valuemethod set(newValue)has the effect of writing to a volatile variablemethod get()returns the current valueeffectively an extension of volatile

but what about atomicity???Slide7

Compare and Set (CAS)

boolean

compareAndSet(expectedValue

, newValue)If value doesn’t equal expectedValue, return falseif

equal, store newValue in value and return true

executes as a single atomic action!supported by many processorswithout requiring locks!

AtomicInteger n = new AtomicInteger(5);

n.compareAndSet(3, 6); // return false – no change

n.compareAndSet(5, 7); // returns true – now is 7Slide8

Incrementing with CAS

/** Increment n by one. Other threads use n too. */

public static void increment(

AtomicInteger

n) { int i = n.get();

while (n.compareAndSet(i, i+1))

i = n.get();

}// AtomicInteger has increment methods doing thisSlide9

Lock-Free Data Structures

Usable by many concurrent threads

using only atomic actions – no locks!

compare and swap is god here

but it only atomically updates one variable at a time!

Let’s implement one!