winter 2000/2001 tokyo institute of...

309
Concurrent Programming Prof. O. Nierstrasz Tokyo Institute of Technology Winter 2000/2001

Upload: others

Post on 10-Jun-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

Concurrent Programming

Prof. O. Nierstrasz

Tokyo Institute of Technology

Winter 2000/2001

Page 2: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 i.

s

ese questions? 31

ncy 32

ency 33es 34

353637

inism 38tions 39

40414243

readsDemo 44y 45

46reation) 47ethods) 48

49n Thread States 50

5152

. 53em 54

55ods 56

ks 575859

entanswer th

Concurre Concurre Processtion Prefixursion

oicen-determarded ac

ead FSPhreads ...he TwoThncurrencmposition.Thread (c.Thread (m.Runnable betweeeadsThreadsThreads ..pping th

izationized methized blocnotify.Object

Table of Cont1. Concurrent Programming 1

Goals of this course 2Schedule 3Introduction 4Recommended reading 5Concurrency 6Parallelism 7Why do we need concurrent programs? 8Difficulties 9Concurrency and atomicity 10Safety 11Liveness 12Expressing Concurrency 13Process Creation 14Co-routines 15Fork and Join 16Cobegin/coend 17Communication and Synchronization 18Synchronization Techniques 19Busy-Waiting 20Semaphores 21Programming with semaphores 22Monitors 23Programming with monitors 24Problems with monitors 25Path Expressions 26Message Passing 27Send and Receive 28Remote Procedure Calls and Rendezvous 29What you should know! 30

Can you

2. Java andModellingFinite StatFSP — AcFSP — RecFSP — ChFSP — NoFSP — GuJavaThreadsSimpleThrMultiple TRunning tFSP — CoFSP — Cojava.langjava.langjava.langTransitionsLTS for ThrCreating Creating ... And stoSynchronSynchronSynchronwait and java.lang

Page 3: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 ii.

ts 92— design steps 93

94

ronized Objects 9596

— design steps 979899

oundedCounter 100dableArray 101

102103104

hronization 105ion — design steps 106lls 107

108

nt 109110

— design steps 111112

ip 113ip ... 114rotocol class 115ow! 116se questions? 117

ock 118

119pecification 120

121122123

What you should know! 60Can you answer these questions? 61

3. Safety and Synchronization 62Modelling interaction — shared actions 63Modelling interaction — handshake 64Modelling interaction — multiple processes 65Safety problems 66Atomicity and interference 67Atomic actions 68Sequential behaviour 69Concurrent behaviour 70Locking 71Synchronization 72Synchronization in Java 73Busy-Wait Mutual Exclusion Protocol 74Atomic read and write 75Modelling the busy-wait protocol 76Busy-wait composition 77Checking for errors 78Conditional synchronization 79Producer/Consumer composition 80Wait and notify 81Slot (put) 82Slot (get) 83Producer in Java 84Consumer in Java 85Composing Producers and Consumers 86What you should know! 87Can you answer these questions? 88

4. Safety Patterns 89Idioms, Patterns and Architectural Styles 90Pattern: Immutable classes 91

Immutability varianImmutable classes Design steps ...Pattern: Fully SynchApplicability ...Full SynchronizationDesign steps ...Design steps ...Example: a BalkingBExample: an ExpanExample ...Bundling AtomicityUsing inner classesPattern: Partial SyncPartial SynchronizatExample: LinkedCeExample ...Pattern: ContainmeApplicability ...Contained ObjectsDesign steps ...Managed OwnershManaged OwnershA minimal transfer pWhat you should knCan you answer the

5. Liveness and DeadlSafety revisitedSafety — property sSafety propertiesSafety propertiesLiveness

Page 4: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 iii.

158bles 159

tions 161tions ... 162ow! 163se questions? 164

165

hrony 166

ous Invocations 167ations — form 168ations — design steps 169

ee variants 171cations 172.. 173ed messages 174ages ... 175e Gateways 176-based messages 177

178reads 179

180ly 181

182183184

a 185ow! 186se questions? 187

188

bjects 189 applicability 190

191

Liveness Problems 124Progress properties — fair choice 125Progress properties 126Progress properties 127Progress analysis 128Deadlock 129Waits-for cycle 130Deadlock analysis - primitive processes 131The Dining Philosophers Problem 132Deadlocked diners 133Dining Philosophers, Safety and Liveness 134Dining Philosophers ... 135Modeling Dining Philosophers 136Dining Philosophers Analysis 137Eliminating Deadlock 138Dining Philosopher Solutions 139What you should know! 140Can you answer these questions? 141

6. Liveness and Guarded Methods 142Achieving Liveness 143Pattern: Guarded Methods 144Guarded Methods — applicability 145Applicability ... 146Guarded Methods — design steps 147Step: Separate interface from policy 148Step: Check guard conditions 149Step: Check guard conditions ... 150Step: Handle interrupts 151Step: Signal state changes 152Notify() vs notifyall() 153Step: Structure notifications 154Encapsulating assignment 156

Tracking StateTracking State VariaDelegating notificaDelegating notificaWhat you should knCan you answer the

7. Lab session I

8. Liveness and AsyncPattern: AsynchronAsynchronous InvocAsynchronous InvocSimple Relays — thrVariant: Direct invoDirect invocations .Variant: Thread-basThread-based messThread-per-messagVariant: CommandTail callsTail calls with new thEarly ReplySimulating Early RepEarly Reply in JavaFuturesA Future ClassUsing Futures in JavWhat you should knCan you answer the

9. Condition ObjectsPattern: Condition OCondition Objects —Condition Objects

Page 5: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 iv.

224225

s Policies 226227

s example 228s example 229s example 230s example 231

ethods 232 — design steps 233

234235236237

ded Counter 238ded Counter 239ow! 240se questions? 241

242

s for Concurrency 243

244re 245

246les 247-Passing 248ication Architectures 249red Designs 250

251252253254255

A Simple Condition Object 192The Nested Monitor problem 193The Nested Monitor problem ... 194The Nested Monitor problem ... 195Nested Monitors in FSP 196Nested Monitors in FSP ... 197Nested Monitors in FSP ... 198Solving the Nested Monitors problem 199Solving Nested Monitors ... 200Example solution 201Pattern: Permits and Semaphores 202Permits and Semaphores — design steps 203Design steps ... 204Variants 205Semaphores in Java 206Using Semaphores 207Using Semaphores ... 208Using Semaphores ... 209What you should know! 210Can you answer these questions? 211

10. Fairness and Optimism 212Pattern: Concurrently Available Methods 213Concurrent Methods — design steps 214Priority 215Fairness 216Interception 217Concurrent Reader and Writers 218Readers/Writers Model 219A Simple RW Protocol 220Safety properties 221Safety properties ... 222Composing the Readers and Writers 223

Progress propertiesStarvationReaders and WriterPolicies ...Readers and WriterReaders and WriterReaders and WriterReaders and WriterPattern: Optimistic MOptimistic MethodsDetect failure ...Detect failure ...Handle conflicts ...Ensure progress ...An Optimistic BounAn Optimistic BounWhat you should knCan you answer the

11. Lab session II

12. Architectural StyleSourcesSoftware ArchitectuArchitectural styleCommunication StySimulated MessageThree-layered ApplProblems with LayeFlow ArchitecturesUnix PipesUnix PipesFlow StagesFlow Policies

Page 6: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 v.

sumers 288289

undedness 290lock 291

292293294295

i nets 296nets 297s 298

mes 299300

ction 301ow! 302se questions? 303

Limiting Flow 256Example: a Pull-based Prime Sieve 257Using Put-Take Buffers 258The PrimeSieve 259Pull-based integer sources 260The ActivePrime Class 261The ActivePrime Class 262The ActivePrime Class ... 263The ActivePrime Class ... 264Blackboard Architectures 265Result Parallelism 266Agenda Parallelism 267Specialist Parallelism 268Linda 269Linda primitives 270Example: Fibonacci 271Evaluating Fibonacci 272Evaluating Fibonacci 273Evaluating Fibonacci 274Evaluating Fibonacci 275Evaluating Fibonacci 276Evaluating Fibonacci 277What you should know! 278Can you answer these questions? 279

13. Petri Nets 280Petri nets: a definition 281Firing transitions 282Modelling with Petri nets 283Concurrency 284Conflict 285Mutual Exclusion 286Fork and Join 287

Producers and ConBounded BuffersReachability and BoLiveness and DeadRelated ModelsFinite State NetsZero-testing NetsOther VariantsApplications of PetrImplementing Petri Centralized schemeDecentralized scheTransactionsCoordinated interaWhat you should knCan you answer the

Page 7: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 1.

Concurrent Programming

mming

scar/cp/

mming in Java: terns

, Addison-

currency: State

Wiley, 1999

© O. Nierstrasz — U. Berne

1. Concurrent Progra

NB: Room change to W8-1008

Lecturer Prof. Oscar NierstraszAssistant Kentarou Fukuchi

WWW matsu-www.is.titech.ac.jp/~o

Texts

☞ D. Lea, Concurrent PrograDesign Principles and PatWesley, 1996

☞ J. Magee, J. Kramer, ConModels & Java Programs,

Page 8: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 2.

Concurrent Programming

se

rency

oncurrency

ng techniques

© O. Nierstrasz — U. Berne

Goals of this cour❑ Introduce basic concepts of concur

☞ safety, liveness, fairness

❑ Present tools for reasoning about c☞ LTS, Petri nets

❑ Learn the best practice programmi☞ idioms and patterns

❑ Get experience with the techniques☞ lab sessions

Page 9: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 3.

Concurrent Programming

ation

Methods

ny

or Concurrency

© O. Nierstrasz — U. Berne

Schedule1. 10 - 02 Introduction 2. 10 - 16 Concurrency and Java3. 10 - 23 Safety and Synchroniz4. 11 - 06 Safety Patterns5. 11 - 13 Liveness and Deadlock6. 11 - 20 Liveness and Guarded 7. 11 - 27 Lab session8. 12 - 04 Liveness and Asynchro9. 12 - 11 Condition Objects10. 01 - 15 Fairness and Optimism11. 01 - 22 Lab session12. 01 - 29 Architectural Styles f13. 02 - 05 Petri Nets14. 02 - 19 Exam

Page 10: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 4.

Concurrent Programming

m ...

© O. Nierstrasz — U. Berne

IntroductionOverview

❑ Concurrency and Parallelism❑ Applications❑ Difficulties

☞ safety, liveness, non-determinisConcurrent Programming Approaches

❑ Process creation ❑ Communication and synchronization

☞ Shared variables☞ Message Passing Approaches

Page 11: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 5.

Concurrent Programming

ing

ing, Principles and

ublishing Co. Inc,

t and Distributed

gramming

, Addison-

rite Parallel

s, Cambridge, 1990.

© O. Nierstrasz — U. Berne

Recommended read❑ G.R. Andrews, Concurrent Programm

Practice, The Benjamin Cummings P1991,

❑ M. Ben-Ari, Principles of ConcurrenProgramming, Prentice Hall, 1990.

❑ A. Burns, G. Davies, Concurrent ProWesley, 1993

❑ N. Carriero, D. Gelernter, How to WPrograms: a First Course, MIT Pres

Page 12: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 6.

Concurrent Programming

hread of control.

threads of control.processes.

© O. Nierstrasz — U. Berne

Concurrency

❑ A sequential program has a single tIts execution is called a process.

❑ A concurrent program has multiple These may be executed as parallel

Page 13: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 7.

Concurrent Programming

:

ive finite progress.

one or more

s on its own th shared memorys on its own ted by a network

© O. Nierstrasz — U. Berne

ParallelismA concurrent program can be executed by

Assume only that all processes make posit

Multiprogramming: processes share processors

Multiprocessing: each process runprocessor but wi

Distributed processing:

each process runprocessor connecto others

Page 14: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 8.

Concurrent Programming

programs?

ize throughput

y

tiple CPUs

© O. Nierstrasz — U. Berne

Why do we need concurrentReactive programming

☞ minimize response delay; maximReal-time programming

☞ process control applicationsSimulation

☞ modelling real-world concurrencParallelism

☞ speed up execution by using mulDistribution

☞ coordinate distributed services

Page 15: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 9.

Concurrent Programming

plexity:

shared data

rly coordinated

ve different results

hing and

© O. Nierstrasz — U. Berne

DifficultiesBut concurrent applications introduce com

Safety❑ concurrent processes may corrupt

Liveness❑ processes may “starve” if not prope

Non-determinism❑ the same program run twice may gi

Run-time overhead❑ thread construction, context switc

synchronization take time

Page 16: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 10.

Concurrent Programming

icity

and P2 complete?

© O. Nierstrasz — U. Berne

Concurrency and atomPrograms P1 and P2 execute concurrently:

{ x = 0 }

P1: x := x+1P2: x := x+2

{ x = ? }

✎ What are possible values of x after P1

✎ What is the intended final value of x?

Page 17: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 11.

Concurrent Programming

ens”

s must be updated

ns may be delayed if state

© O. Nierstrasz — U. Berne

SafetySafety = ensuring consistency

A safety property says “nothing bad happ

❑ Mutual exclusion: shared resourceatomically

❑ Condition synchronization: operatioshared resources are in the wrong ☞ (e.g., read from empty buffer)

Page 18: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 12.

Concurrent Programming

happens”

ays access a shared

ventually access

© O. Nierstrasz — U. Berne

LivenessLiveness = ensuring progress

A liveness property says “something good

❑ No Deadlock: some process can alwresource

❑ No Starvation: all processes can eshared resources

Page 19: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 13.

Concurrent Programming

ncyhanisms for:

esses?

tion?

ncy?

© O. Nierstrasz — U. Berne

Expressing ConcurreA programming language must provide mec

Process creation❑ how do you specify concurrent proc

Communication❑ how do processes exchange informa

Synchronization❑ how do processes maintain consiste

Page 20: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 14.

Concurrent Programming

iant of the following:

© O. Nierstrasz — U. Berne

Process CreationMost concurrent languages offer some var

❑ Co-routines

❑ Fork and Join

❑ Cobegin/coend

Page 21: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 15.

Concurrent Programming

nd require explicit

t higher-level

Coroutine B

© O. Nierstrasz — U. Berne

Co-routinesCo-routines are only pseudo-concurrent atransfers of control:

Co-routines can be used to implement mosconcurrent mechanisms.

Program P Coroutine Acall A

call Bresume Aresume B

return

Page 22: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 16.

Concurrent Programming

processes:

te.

care and discipline.

Program P3

© O. Nierstrasz — U. Berne

Fork and JoinFork can be used to create any number of

Join waits for another process to termina

Fork and join are unstructured, so require

Program P1 Program P2fork P2

fork P3join P2

Page 23: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 17.

Concurrent Programming

ed:

d

f processes.

cks have terminated.

S3 S4

© O. Nierstrasz — U. Berne

Cobegin/coendCobegin/coend blocks are better structur

cobegin S1 || S2 || ... || Sn coen

but they can only create a fixed number o

The caller continues when all of the coblo

Main S1 S2

Page 24: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 18.

Concurrent Programming

ronizationaches based on variables, processes icate indirectly. synchronization isms are needed.

x P2

P3y

© O. Nierstrasz — U. Berne

Communication and SynchIn approshared communExplicitmechan

In message passing approaches, communication and synchronization are combined.Communication may be either synchronous or asynchronous.

x y z ...

P1 P2 P3

P1

Page 25: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 19.

Concurrent Programming

iquesnt in expressive

other.

le of programming.

Message Oriented

dall

Message Passing

© O. Nierstrasz — U. Berne

Synchronization TechnDifferent approaches are roughly equivalepower and can be used to implement each

Each approach emphasizes a different sty

Procedure Oriented

Operation OrienteRemote Procedure C

Semaphores

Busy-Waiting

Monitors

Path Expressions

Page 26: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 20.

Concurrent Programming

variables.

ment: a shared variablepeatedly tests the

ze correctly and

© O. Nierstrasz — U. Berne

Busy-WaitingBusy-waiting is primitive but effective

Processes atomically set and test shared

Condition synchronization is easy to imple❑ to signal a condition, a process sets❑ to wait for a condition, a process re

variable

Mutual exclusion is more difficult to realiefficiently.

Page 27: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 21.

Concurrent Programming

(1968) as a higher-n.

lued variable s with

s s := s-1s+1

© O. Nierstrasz — U. Berne

Semaphores

Semaphores were introduced by Dijkstra level primitive for process synchronizatio

A semaphore is a non-negative, integer-vatwo operations:

P(s): delays until s>0then, atomically execute

V(s) atomically executes s:=

Page 28: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 22.

Concurrent Programming

phores semaphores, which

al Section

itical Section

x)

x)

© O. Nierstrasz — U. Berne

Programming with semaMany problems can be solved using binarytake on values 0 or 1.

process P1loop

{ wants to enter }Critical Section

{ exits }Non-critical Section

endend

process P2loop

Critic

Non-crend

end

P(mutex)

V(mutex)

P(mute

V(mute

Page 29: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 23.

Concurrent Programming

rations that

procedure calls

mutually exclusive

lized using wait and

ait and signal ...

© O. Nierstrasz — U. Berne

Monitors

A monitor encapsulates resources and opemanipulate them:

❑ operations are invoked like ordinary

☞ invocations are guaranteed to be

☞ condition synchronization is reasignal primitives

☞ there exist many variations of w

Page 30: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 24.

Concurrent Programming

itorsetch(var it : T);

= 0 then

lots[head]; size - 1; (head+1) mod N;

;;;

mpty.wait

l.signal

© O. Nierstrasz — U. Berne

Programming with montype buffer(T) = monitor

varslots : array [0..N-1] of T;head, tail : 0..N-1;size : 0..N;

procedure deposit(p : T);begin

if size = N then

slots[tail] := p;size := size + 1;tail := (tail+1) mod N;

end

procedure fbegin

if size

it := ssize :=head :=

end

beginsize := 0head := 0tail := 0

end

notfull, notempty:condition;

notfull.wait

notempty.signal

note

notful

Page 31: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 25.

Concurrent Programming

orshores, but they are

ckeds not supported

ded to allow waiting

signal and

gnals are not savedally handled to

© O. Nierstrasz — U. Berne

Problems with monitMonitors are more structured than semapstill tricky to program:

☞ Conditions must be manually che☞ Simultaneous signal and return i

A signalling process is temporarily suspenprocesses to enter!

❑ Monitor state may change betweenresumption of signaller

❑ Unlike with semaphores, multiple si❑ Nested monitor calls must be speci

prevent deadlock

Page 32: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 26.

Concurrent Programming

quence of operations

to many problems, ral concurrent

© O. Nierstrasz — U. Berne

Path Expressions

Path expressions express the allowable seas a kind of regular expression:

buffer : (put; get) *

Although they elegantly express solutionspath expressions are too limited for geneprogramming.

Page 33: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 27.

Concurrent Programming

and synchronization:

nd a destinationsses, ...

iables and a sourceitly identified

ever blockhe buffer is fullr must both be ready

© O. Nierstrasz — U. Berne

Message PassingMessage passing combines communication

❑ The sender specifies the message a☞ a process, a port, a set of proce

❑ The receiver specifies message var☞ source may or may not be explic

❑ Message transfer may be:☞ asynchronous: send operations n☞ buffered: sender may block if t☞ synchronous: sender and receive

Page 34: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 28.

Concurrent Programming

are explicitly named:

]

© O. Nierstrasz — U. Berne

Send and ReceiveIn CSP and Occam, source and destinationPROC buffer(CHAN OF INT give, take, signal)

...SEQ

numitems := 0 ...WHILE TRUEALT

numitems ≤ size & SEQ

numitems := numitems + 1inindex := (inindex + 1) REM size

numitems > 0 & SEQ

numitems := numitems - 1outindex := (outindex + 1) REM size

give?thebuffer[inindex

signal?any

take!thebuffer[outindex]

Page 35: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 29.

Concurrent Programming

Rendezvousown in advance:

© O. Nierstrasz — U. Berne

Remote Procedure Calls andIn Ada, the caller identity need not be kntask body buffer is ...begin loop

selectwhen no_of_items < size =>

dothe_buffer(in_index) := x;

end give;no_of_items := no_of_items + 1; ...

orwhen no_of_items > 0 =>

dox := the_buffer(out_index);

end take;no_of_items := no_of_items - 1; ...

end select;end loop; ...

accept give(x : in item)

accept take(x : out item)

Page 36: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 30.

Concurrent Programming

ow!

s introduce?

ock and starvation??

anisms?res? message-passing?

© O. Nierstrasz — U. Berne

What you should kn✎ Why do we need concurrent programs?✎ What problems do concurrent program✎ What are safety and liveness?✎ What is the difference between deadl✎ How are concurrent processes created✎ How do processes communicate?✎ Why do we need synchronization mech✎ How do monitors differ from semapho✎ In what way are monitors equivalent to

Page 37: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 31.

Concurrent Programming

estions?rrency and

waiting?ting semaphores?

using monitors?ng semaphores?cause?ynchronous or

© O. Nierstrasz — U. Berne

Can you answer these qu✎ What is the difference between concu

parallelism?✎ When does it make sense to use busy-✎ Are binary semaphores as good as coun✎ How could you implement a semaphore✎ How would you implement monitors usi✎ What problems could nested monitors ✎ Is it better when message passing is s

asynchronous?

Page 38: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 32.

Java and Concurrency

rency

© O. Nierstrasz — U. Berne

2. Java and Concur

Overview❑ Modelling Concurrency

☞ Finite State Processes ☞ Labelled Transition Systems

❑ Java☞ Thread creation☞ Thread lifecycle☞ Synchronization

Selected material © Magee and Kramer

Page 39: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 33.

Java and Concurrency

cyrministic, it can be heir properties.

that makes it easier

f sequential

© O. Nierstrasz — U. Berne

Modelling ConcurrenBecause concurrent systems are non-detedifficult to build them and reason about t

A model is an abstraction of the real worldto focus on the points of interest.

Approach:Model concurrent systems as sets ofinite state processes

Page 40: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 34.

Java and Concurrency

sesfinite state process:

g a processes as a

ble traces :n ...

© O. Nierstrasz — U. Berne

Finite State ProcesFSP is a textual notation for specifying a SWITCH = (on -> off-> SWITCH).

LTS is a graphical notation for interpretinlabelled transition system:

The meaning of a process is a set of possion→off→on→off→on→off→on→off→o

SWITCH

Page 41: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 35.

Java and Concurrency

ix P) is a process that ehaves like P.

actions start with

ing process

© O. Nierstrasz — U. Berne

FSP — Action PrefIf x is an action and P a process then (x->initially engages in the action x and then b

ONESHOT = (once -> STOP).

Convention: ❑ Processes start with UPPERCASE,

lowercase.

terminat

Page 42: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 36.

Java and Concurrency

© O. Nierstrasz — U. Berne

FSP — RecursionRepetitive behaviour uses recursion:

SWITCH = OFF,OFF = (on -> ON),ON = (off-> OFF).

Page 43: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 37.

Java and Concurrency

) is a process which or y.

e P; otherwise, if y

SS

© O. Nierstrasz — U. Berne

FSP — ChoiceIf x and y are actions then (x->P | y->Qinitially engages in either of the actions x

If x occurs, the process then behaves likoccurs, it behaves like Q.

DRINKS = ( red ->coffee -> DRINK| blue->tea -> DRINK).

✎ What are the possible traces of DRINKS?

Page 44: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 38.

Java and Concurrency

nismves as either P or Q.

© O. Nierstrasz — U. Berne

FSP — Non-determi(x->P | x->Q) performs x and then beha

COIN = ( toss -> heads -> COIN| toss -> tails -> COIN).

Page 45: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 39.

Java and Concurrency

ions the guard B is true

chosen.

>COUNT[i+1]>COUNT[i-1]

© O. Nierstrasz — U. Berne

FSP — Guarded act(when B x->P | y->Q) means that whenthen either x or y may be chosen; otherwise if B is false then only y may be

COUNT (N=3) = COUNT[0],COUNT[i:0..N] = ( when(i<N) inc-

| when(i>0) dec-).

Page 46: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 40.

Java and Concurrency

bles Smalltalk: object-orientedtyping

ations:twork interactionver networkm malicious objects

ed by users

© O. Nierstrasz — U. Berne

JavaSyntax resembles C++; semantics resem

❑ Strongly-typed, concurrent, “pure”❑ Single-inheritance but multiple sub❑ Automatic garbage collection

Innovation in support for network applic❑ Standard APIs for concurrency, ne❑ Classes can be dynamically loaded o❑ Security model protects clients fro

Java applications do not have to be install

Page 47: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 41.

Java and Concurrency

its behaviour:{{ad constructor

the thread does

getName());()*1000)); e) { } }etName());

© O. Nierstrasz — U. Berne

ThreadsA Java Thread has a run method definingclass SimpleThread public SimpleThread(String str) super(str); // Call Thre

} { // What

for (int i=0; i<5; i++) {System.out.println(i + " " + try { sleep((int)(Math.random} catch (InterruptedException

System.out.println("DONE! " + g}

}

extends Thread

public void run()

Page 48: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 42.

Java and Concurrency

P, sequential, finite

e-> STOP).

-> Print[n+1]e -> STOP).

© O. Nierstrasz — U. Berne

SimpleThread FSSimpleThread can be modelled as a singlestate process:

Simple = ([1]->[2]->[3]->[4]-> don

Or, more generically:const N = 5Simple = Print[1],Print[n:1..N] = ( when(n<N) [n]

| when(n==N) don

Page 49: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 43.

Java and Concurrency

..ctly but is executed

] args) {tart it:

;);art()

© O. Nierstrasz — U. Berne

Multiple Threads .A Thread’s run method is never called direwhen the Thread is started:

class TwoThreadsDemo {public static void main (String[// Instantiate a Thread, then snew SimpleThread("Jamaica").new SimpleThread("Fiji").start(

}}

st

Page 50: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 44.

Java and Concurrency

sDemo

0 Jamaica0 Fiji1 Jamaica1 Fiji2 Fiji3 Fiji2 Jamaica4 Fiji3 JamaicaDONE! Fiji4 JamaicaDONE! Jamaica

© O. Nierstrasz — U. Berne

Running the TwoThreadIn this implementation of Java, the execution of the two threads is interleaved.

☞ This is not guaranteed for all implementations!

✎ Why are the output lines never garbled?

E.g.0 Ja0 Fimajiica...

Page 51: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 45.

Java and Concurrency

yand concurrently

eimple

© O. Nierstrasz — U. Berne

FSP — ConcurrencWe can relabel the transitions of Simple compose two copies of it:

||TwoThreadsDemo = ( fiji:Simpl|| jamaica:S).

✎ What are all the possible traces?

Page 52: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 46.

Java and Concurrency

ncomposition will have

© O. Nierstrasz — U. Berne

FSP — CompositioIf we restrict ourselves to two steps, the nine states:

Page 53: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 47.

Java and Concurrency

ation)a.lang.Thread, or

tring name);

© O. Nierstrasz — U. Berne

java.lang.Thread (creA Java thread can either inherit from javcontain a Runnable object:

public class java.lang.Threadextends java.lang.Object

{public ;public ;public Thread(Runnable target, Spublic Thread(String name);

...

implements java.lang.Runnable

Thread()Thread(Runnable target)

Page 54: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 48.

Java and Concurrency

hods)ed:

;llis)eption;

w deprecated!

© O. Nierstrasz — U. Berne

java.lang.Thread (metA thread must be created, and then start

...public void run();public synchronized void public static void sleep(long mi

throws InterruptedExcpublic static void yield();public final String getName();

...}

NB: suspend(), resume() and stop() are no

start()

Page 55: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 49.

Java and Concurrency

ee

ritance, it is d another class.

© O. Nierstrasz — U. Berne

java.lang.Runnablpublic interface java.lang.Runnabl{public abstract void run();

}

Since Java does not support multiple inheimpossible to inherit from both Thread an

Instead, simply define:class MyStuff extends UsefulStuff

...

and instantiate:new Thread(new MyStuff);

implements Runnable

Page 56: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 50.

Java and Concurrency

ad States

lapsedy() or notifyAll()ompleted

n() exits

© O. Nierstrasz — U. Berne

Transitions between Thre

Thread

Runnable

sleep()wait()

block on I/O

time enotif

I/O c

ru

yield()

start()

Not Runnable

Page 57: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 51.

Java and Concurrency

unnable

Runnable ).

© O. Nierstrasz — U. Berne

LTS for ThreadsThread = ( start -> Runnable ),Runnable =( yield -> Runnable| {sleep, wait, blockio} -> NotR| stop -> STOP ),

NotRunnable = ( {awake, notify, unblockio} ->

Page 58: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 52.

Java and Concurrency

the time:

;, "Clock")

© O. Nierstrasz — U. Berne

Creating ThreadsThis Clock applet uses a thread to updatepublic class Clockextends java.applet.Applet

{Thread clockThread = null;public void start() {if (clockThread == null) {

;}

} ...

implements Runnable

clockThread = new Thread(thisclockThread.start()

Page 59: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 53.

Java and Concurrency

...

to null{

} }

ockThread)

© O. Nierstrasz — U. Berne

Creating Threads ...public void run() {// stops when clockThread is set

repaint();try { ;catch (InterruptedException e){

}}...

while(Thread.currentThread()==cl

clockThread.sleep(1000)

Page 60: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 54.

Java and Concurrency

em

10);

ts thread

trangely similar

= null; }

© O. Nierstrasz — U. Berne

... And stopping th...public void paint(Graphics g) {Date now = new Date();g.drawString(now.getHours()+ ":" + now.getMinutes()+ ":" + now.getSeconds(), 5,

}// When the applet stops, stop ipublic void

}

Be careful — Applets and Threads have sinterfaces!

stop() { clockThread

Page 61: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 55.

Java and Concurrency

ber of threads may object.

n a method starts!

dition!

itical section which ing.

in locking and

© O. Nierstrasz — U. Berne

SynchronizationWithout synchronization, an arbitrary numrun at any time within the methods of an

☞ Class invariant may not hold whe

☞ So can’t guarantee any post-con

A solution: consider a method to be a crlocks access to the object while it is runn

This works as long as methods cooperate unlocking access!

Page 62: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 56.

Java and Concurrency

ods

ynchronized with :

lterOutputStream {

(String s);(char c);

© O. Nierstrasz — U. Berne

Synchronized meth

Either: declare an entire method to be sother synchronized methods of an object

public class PrintStream extends Fi...public void printlnpublic synchronized void println...

}

synchronized

Page 63: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 57.

Java and Concurrency

ks

a method with

resource

© O. Nierstrasz — U. Berne

Synchronized bloc

Or: synchronize an individual block withinrespect to some object:

public Object aMethod() {// unsynchronized code...

{ // Lock...

} // unlock resource...

}

synchronized(resource)

Page 64: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 58.

Java and Concurrency

rupted:

ect val) {it till empty

) { }

© O. Nierstrasz — U. Berne

wait and notifySynchronization must sometimes be interclass Slot implements Buffer {private Object slotVal;public void put(Objwhile (slotVal != null) { // watry { ; }catch (InterruptedException e

}slotVal = val;

;return;

} ...}

synchronized

wait()

notifyAll()

Page 65: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 59.

Java and Concurrency

an keywords:

© O. Nierstrasz — U. Berne

java.lang.Objectwait() and notify() are methods rather th

public class java.lang.Object{...public final void wait()throws InterruptedException;

public final void notify();public final void notifyAll();...

}

Page 66: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 60.

Java and Concurrency

ow!

cy?del?aces?a?

or?

be synchronized?

© O. Nierstrasz — U. Berne

What you should kn✎ What are finite state processes?✎ How are they used to model concurren✎ What are traces, and what do they mo✎ How can the same FSP have multiple tr✎ How do you create a new thread in Jav✎ What states can a Java thread be in?

How can it change state?✎ What is the Runnable interface good f✎ What is a critical section?✎ When should you declare a method to

Page 67: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 61.

Java and Concurrency

estions?eatedly performs

traces does the full

invariant?y outside a

blocks rather than

n FSP?

© O. Nierstrasz — U. Berne

Can you answer these qu✎ How would you specify an FSP that rep

hello, but may stop at any time?✎ How many states and how many possible

TwoThreadsDemo FSP have?✎ When should you inherit from Thread?✎ How can concurrency invalidate a class✎ What happens if you call wait or notif

synchronized method or block?✎ When is it better to use synchronized

methods?✎ How would you model synchronization i

Page 68: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 62.

Safety and Synchronization

onization

tions

protocol

© O. Nierstrasz — U. Berne

3. Safety and Synchr

Overview❑ Modelling interaction in FSP❑ Safety — synchronizing critical sec

☞ Locking for atomicity☞ The busy-wait mutual exclusion

❑ Conditional synchronization☞ Slots in FSP☞ wait(), notify() and notifyAll()☞ Slots in Java

Selected material © Magee and Kramer

Page 69: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 63.

Safety and Synchronization

red actionscesses are shared ion:

y interleavedy for all participants

).

© O. Nierstrasz — U. Berne

Modelling interaction — shaActions that are common between two proand can be used to model process interact

❑ Unshared actions may be arbitraril❑ Shared actions occur simultaneousl

MAKER = ( make -> ready -> MAKER USER = ( ready -> use -> USER ).

||MAKER_USER = ( MAKER || USER ).

✎ What are the states of the LTS? ✎ The traces?

Page 70: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 64.

Safety and Synchronization

andshakeowledgement

-> MAKERv2 ).-> USERv2 ).

v2 ).

LTS?

© O. Nierstrasz — U. Berne

Modelling interaction — hA handshake is an action that signals ackn

MAKERv2 = ( make -> ready -> usedUSERv2 = ( ready -> use -> used

||MAKER_USERv2 = ( MAKERv2 || USER

✎ What are the states and traces of the

Page 71: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 65.

Safety and Synchronization

ple processese multiple processes:

d -> MAKE_A ).d -> MAKE_B ).sed -> ASSEMBLE ).

ASSEMBLE ).

LTS?

© O. Nierstrasz — U. Berne

Modelling interaction — multiShared actions can be used to synchroniz

MAKE_A = ( makeA -> ready -> useMAKE_B = ( makeB -> ready -> useASSEMBLE = ( ready -> assemble -> u

||FACTORY = ( MAKE_A || MAKE_B ||

✎ What are the states and traces of the

Page 72: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 66.

Safety and Synchronization

are in a consistent

be a critical section.

m1

m2

m3

m4

m5

methods

consistent states

?!

© O. Nierstrasz — U. Berne

Safety problemsObjects must only be accessed when theystate, formalized by a class invariant.

Each method assumes the class invariant holds when it starts, and it re-establishes it when done.

If methods interleave arbitrarily, an inconsistent state may be accessed, and the object may be left in a “dirty” state.

Where shared resources are updated may

incomingrequests

Page 73: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 67.

Safety and Synchronization

rence

© O. Nierstrasz — U. Berne

Atomicity and interfeConsider the two processes:

{ x = 0 }AInc: x := x+1BInc: x := x+1

{ x = ? }

✎ How can these processes interfere?

Page 74: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 68.

Safety and Synchronization

actions:

] ]). }

a.

© O. Nierstrasz — U. Berne

Atomic actionsIndividual reads and writes may be atomicconst N = 3range T = 0..NVar = Var[0],Var[u:T] = ( read[u] -> Var[u

| write[v:T] -> Var[vset VarAlpha = { read[T], write[T]

Inc =

+VarAlph

( read[v:0..N-1]-> write[v+1]-> STOP )

Page 75: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 69.

Safety and Synchronization

urchronization:

© O. Nierstrasz — U. Berne

Sequential behavioA single sequential thread requires no syn

Var Inc

(Var||Inc)

Page 76: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 70.

Safety and Synchronization

urads may interfere:

© O. Nierstrasz — U. Berne

Concurrent behavioWithout synchronization, concurrent thre

({a,b}::Var || a:Inc || b:Inc)

Page 77: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 71.

Safety and Synchronization

atomic:K ).

VarAlpha.

© O. Nierstrasz — U. Berne

LockingLocks are used to make a critical section LOCK = ( acquire -> release -> LOCINC =

+

( acquire-> read[v:0..N-1]-> write[v+1]-> release-> STOP )

Page 78: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 72.

Safety and Synchronization

s by sharing a lock:

INC||b:INC)

© O. Nierstrasz — U. Berne

SynchronizationProcesses can synchronize critical section

({a,b}::VAR||{a,b}::LOCK||a:

Page 79: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 73.

Safety and Synchronization

ava:

use them to

© O. Nierstrasz — U. Berne

Synchronization in JJava Threads also synchronize using locks

is just convenient syntax for:T m() {

}

Every object has a lock, and Threads maysynchronize with each other.

synchronized T m() {// method body

}

synchronized (this) {// method body

}

Page 80: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 74.

Safety and Synchronization

n Protocolenter its CS, P2:

adlock-free?

:= true “P1”nter1 and turn = “P1”kipl Section:= falsetical Section

© O. Nierstrasz — U. Berne

Busy-Wait Mutual ExclusioP1 sets enter1 := true when it wants to but sets turn := “P2” to yield priority to

✎ Is this protocol correct? Is it fair? De

process P1loop

enter1 := true turn := “P2”while enter2 and

turn = “P2”do skip

Critical Sectionenter1 := falseNon-critical Section

endend

process P2loop

enter2 turn :=while e

do sCriticaenter2 Non-cri

endend

Page 81: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 75.

Safety and Synchronization

ite

-> Var[u]-> Var[v]).

e,false}

e) = BOOL[Init],

-> BOOL[b]ol] -> BOOL[x]).

© O. Nierstrasz — U. Berne

Atomic read and wr

We can model integer and boolean variables as processes with atomic read and write actions:

range T = 1..2

Var = Var[1],Var[u:T] =

( read[u] | write[v:T]

set Bool = {tru

BOOL(Init='falsBOOL[b:Bool] =

( is[b]| setTo[x:Bo

Page 82: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 76.

Safety and Synchronization

protocolCS:

||P2)@{a,b,c,d}.

r2.setTo['true]rite[1]

is['false] -> CS2is['true] ->.read[2] -> CS2.read[1] -> Gd2)),

.setTo['false]> d

© O. Nierstrasz — U. Berne

Modelling the busy-wait Each process performs two actions in its

||Test = (enter1:BOOL||enter2:BOOL||turn:Var||P1

P1 = ( enter1.setTo['true]-> turn.write[2]-> Gd1),

Gd1 =( enter2.is['false] -> CS1| enter2.is['true] ->

( turn.read[1] -> CS1| turn.read[2] -> Gd1)),

CS1 = ( -> enter1.setTo['false]-> P1).

P2 = ( ente-> turn.w-> Gd2),

Gd2 =( enter1.| enter1.

( turn| turn

CS2 = ( -> enter2-> P2).

a -> b c -

Page 83: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 77.

Safety and Synchronization

ion

© O. Nierstrasz — U. Berne

Busy-wait composit

Page 84: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 78.

Safety and Synchronization

rsr system with an omicity is violated:

) )).

l?

© O. Nierstrasz — U. Berne

Checking for erroWe can check for errors by composing ouagent that moves to the ERROR state if at

Ok = ( | b -> Ok| | d -> Ok

✎ What happens if we break the protoco

a -> ( c -> ERRORc -> ( a -> ERROR

Page 85: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 79.

Safety and Synchronization

ationready locked:

K ).

© O. Nierstrasz — U. Berne

Conditional synchronizA lock delays an acquire request if it is al

LOCK = ( acquire -> release -> LOC

Similarly, a one-slot buffer delays a put request if it is full and delays a get request if it is empty:

const N = 2Slot = ( put[v:0..N]

-> get[v] -> Slot ).

Page 86: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 80.

Safety and Synchronization

position

© O. Nierstrasz — U. Berne

Producer/Consumer comProducer = ( put[0]

-> put[1] -> put[2]-> Producer).

Consumer = ( get[x:0..N]-> Consumer ).

||Chain = ( Producer||Slot||Consumer )

Page 87: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 81.

Safety and Synchronization

ronized behaves like

d, releasing the locking on that objectaiting on that object

nd notify() will

it doesn’t matter

© O. Nierstrasz — U. Berne

Wait and notifyA Java object whose methods are all syncha monitor

Within a synchronized method or block:❑ wait() suspends the current threa❑ notify() wakes up one thread wait❑ notifyAll() wakes up all threads w

Outside of a synchronized block, wait() araise an IllegalMonitorStateException

Always use notifyAll() unless you are surewhich thread you wake up!

Page 88: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 82.

Safety and Synchronization

ect val) {

Runnable) { }

hreads Runnable

© O. Nierstrasz — U. Berne

Slot (put)class Slot implements Buffer {private Object slotVal;

public void put(Objwhile (slotVal != null) {try { ; } // become Notcatch (InterruptedException e

}slotVal = val;

; // make waiting treturn;

}...

synchronized

wait()

notifyAll()

Page 89: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 83.

Safety and Synchronization

{

) { }

© O. Nierstrasz — U. Berne

Slot (get)...public Object get()Object rval;while (slotVal == null) {try { ; }catch (InterruptedException e

}rval = slotVal;slotVal = null;

;return rval;

}}

synchronized

wait()

notifyAll()

Page 90: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 84.

Safety and Synchronization

e slot: void action(int n) { message;e = this.getName() + "("ring.valueOf(n) + ")";

;.out.println(getName() put " + message);

put(message)

© O. Nierstrasz — U. Berne

Producer in JavaThe Producer puts _count messages to thclass Producer extends Thread {

protected int _count;protected Buffer _slot;Producer(String name,

Buffer slot, int count) {super(name);_slot = slot;_count = count;

}

public void {int i;for (i=1;i<=_count;i++) {

this.action(i);}

}

protectedStringmessag

+ St

System+ "

}}

run()

_slot.

Page 91: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 85.

Safety and Synchronization

only! {

ssage);

© O. Nierstrasz — U. Berne

Consumer in Java... and the Consumer gets them:class Consumer extends Producer { // code reuse

Consumer(String name, Buffer slot, int count)super(name, slot, count);

}protected void action(int n) {

String message;message = (String) ;System.out.println(getName() + " got " + me

}}

_slot.get()

Page 92: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 86.

Safety and Synchronization

onsumersare the buffer:

;;;

;t();)

© O. Nierstrasz — U. Berne

Composing Producers and CMultiple producers and consumers may sh

public static void main(String args[]) {Buffer slot = ;

("apple ", slot, count)new Producer("orange", slot, count).start()new Producer("banana", slot, count).start()

("asterix", slot, count)new Consumer("obelix ", slot, 2*count).star

}

new Slot()new Producer .start()

new Consumer .start(

Page 93: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 87.

Safety and Synchronization

ow!?

tical about it?nchronization??ent the busy-wait

ty violations?y outside a

© O. Nierstrasz — U. Berne

What you should kn✎ How do you model interaction with FSP✎ What is a critical section? What is cri✎ Why don’t sequential programs need sy✎ How do locks address safety problems✎ What primitives do you need to implem

mutex protocol?✎ How can you use FSP to check for safe✎ What happens if you call wait or notif

synchronized method or block?✎ When is it safe to use notifyAll()?

Page 94: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 88.

Safety and Synchronization

estions?t might be violated

a?grams without using

s) rather than

Deadlock-free?in Java?re complex than the

© O. Nierstrasz — U. Berne

Can you answer these qu✎ What is an example of an invariant tha

by interfering, concurrent threads?✎ What constitute atomic actions in Jav✎ Can you ensure safety in concurrent pro

locks?✎ When should you use synchronize(thi

synchronize(someObject)?✎ Is the busy-wait mutex protocol fair? ✎ How would you implement a Lock class ✎ Why is the Java Slot class so much mo

FSP Slot specification?

Page 95: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 89.

Safety Patterns

rns

g state changes

ess

ical sections”

cess

© O. Nierstrasz — U. Berne

4. Safety Patte

Overview❑ Immutability:

☞ avoid safety problems by avoidin❑ Full Synchronization:

☞ dynamically ensure exclusive acc❑ Partial Synchronization:

☞ restrict synchronization to “crit❑ Containment:

☞ structurally ensure exclusive ac

Page 96: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 90.

Safety Patterns

ctural Styles express best ems.

ommunicating ign problem

n schema for

© O. Nierstrasz — U. Berne

Idioms, Patterns and ArchiteIdioms, patterns and architectural stylespractice in resolving common design probl

Idioms “an implementation technique”

Design patterns “a commonly-recurring structure of ccomponents that solves a general deswithin a particular context”

Architectural patterns “a fundamental structural organizatiosoftware systems”

Page 97: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 91.

Safety Patterns

lasses

ging an object’s

simple ADTs s (java.lang.Integer) mutable and

ingBuffer

rld”ent the same value the same integer

© O. Nierstrasz — U. Berne

Pattern: Immutable c

Intent: Bypass safety issues by not chanstate after creation.

Applicability❑ When objects represent values of

☞ colours (java.awt.Color), number❑ When classes can be separated into

immutable versions☞ java.lang.String vs. java.lang.Str

❑ When updating by copying is cheap☞ “hello” + “ ” + “world” → “hello wo

❑ When multiple instances can repres☞ i.e., two copies of 712 represent

Page 98: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 92.

Safety Patterns

ts

ct’s state do not eclared static)l to the method

lly computed needs

mutable phaseafter hardening

© O. Nierstrasz — U. Berne

Immutability varianVariantsStateless methods

❑ methods that do not access an objeneed to be synchronized (can be d

❑ any temporary state should be locaStateless objects

❑ an object whose “state” is dynamicano synchronization!

“Hardening”❑ object becomes immutable after a ❑ expose to concurrent threads only

Page 99: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 93.

Safety Patterns

ign stepst are never changed

me Server class

als must be ed in all ors

© O. Nierstrasz — U. Berne

Immutable classes — desDeclare a class with instance variables thaafter construction.class Relay { // helper for soprivate final Server server_;

Relay(Server s) { // blank finserver_ = s; // initializ

} // construct

void doIt() { ;

}}

server_.doIt()

Page 100: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 94.

Safety Patterns

n immutable data der overriding de.

rate new objects of

al.

le, use s for the methods

© O. Nierstrasz — U. Berne

Design steps ...❑ Especially if the class represents a

abstraction (such as String), consiObject.equals and Object.hashCo

❑ Consider writing methods that genethis class. (e.g., String concatenation)

❑ Consider declaring the class as fin

❑ If only some variables are immutabsynchronization or other techniquethat are not stateless.

Page 101: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 95.

Safety Patterns

d Objects

nchronizing all any point in time.

ad/write and write/ntext in which it the

ithout waits, retries,

a layered design in onization of this

© O. Nierstrasz — U. Berne

Pattern: Fully Synchronize

Intent: Maintain consistency by fully symethods. At most one method will run at

Applicability❑ You want to eliminate all possible re

write conflicts, regardless of the coobject is used.

❑ All methods can run to completion wor infinite loops.

❑ You do not need to use instances inwhich other objects control synchrclass.

Page 102: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 96.

Safety Patterns

failures, by:

cessorscations

ncy

© O. Nierstrasz — U. Berne

Applicability ...❑ You can avoid or deal with liveness

☞ Exploiting partial immutability ☞ Removing synchronization for ac☞ Removing synchronization in invo☞ Arranging per-method concurre☞ ...

Page 103: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 97.

Safety Patterns

sign stepsed

state (i.e, no public hat return ).

as synchronized in n case a constructor .

iables must either do hods or within blocks lass()) { ... }.

© O. Nierstrasz — U. Berne

Full Synchronization — de❑ Declare all methods as synchroniz

☞ Do not allow any direct access toinstance variables; no methods treferences to instance variables

☞ Constructors cannot be marked Java. Use a synchronized block ipasses this to multiple threads

☞ Methods that access static varso via static synchronized metof the form synchronized(getC

Page 104: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 98.

Safety Patterns

xits leaving the it exits via an

omically run to

© O. Nierstrasz — U. Berne

Design steps ...

❑ Ensure that every public method eobject in a consistent state, even ifexception.

❑ Keep methods short so they can atcompletion.

Page 105: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 99.

Safety Patterns

on balking:

o client if

pend on state (e.g., eck outside

so that clients can a request

© O. Nierstrasz — U. Berne

Design steps ...❑ State-dependent actions must rely

☞ Return failure (i.e., exception) tpreconditions fail

☞ If the precondition does not dejust on the arguments), then chsynchronized code

☞ Provide public accessor methodscheck conditions before making

Page 106: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 100.

Safety Patterns

dCounter

/ between MIN and MAXnt_; }

/ if pre fails/ throw exception

/ analogous

is class were not

© O. Nierstrasz — U. Berne

Example: a BalkingBoundepublic class BalkingBoundedCounter {

protected long count_ = BoundedCounter.MIN; /public long value() { return coupublic void inc()

throws CannotIncrementException {//

else++count_;

}public synchronized void dec() ... { ... } /

}

✎ What safety problems could arise if thfully synchronized?

synchronizedsynchronized

if (count_ >= BoundedCounter.MAX) throw new CannotIncrementException();

Page 107: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 101.

Safety Patterns

eArray

lementsumber of slots used

ve some space

; } indexing

© O. Nierstrasz — U. Berne

Example: an ExpandablA simplified variant of java.util.Vector:import java.util.NoSuchElementException;public class ExpandableArray {

protected Object[] data_; // the eprotected int size_; // the npublic ExpandableArray(int cap) {

data_ = new Object[cap]; // resersize_ = 0;

}public int size() { return size_public Object at(int i) // array

throws NoSuchElementException {

elsereturn data_[i];

} ...

synchronizedsynchronized

if (i < 0 || i >= size_ ) throw new NoSuchElementException();

Page 108: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 102.

Safety Patterns

// add at end// need a bigger array// so increase ~50%

© O. Nierstrasz — U. Berne

Example ...public void append(Object x) {

if (size_ >= data_.length) { Object[] olddata = data_;data_ = new Object[3 * (size_ + 1) / 2];for (int i = 0; i < size_; ++i)

data_[i] = olddata[i];}data_[size_++] = x;

}public void removeLast()

throws NoSuchElementException {

elsedata_[--size_] = null;

}}

synchronized

synchronized

if (size_ == 0)

throw new NoSuchElementException();

Page 109: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 103.

Safety Patterns

yods that perform mic action

on to an object

eArray {); }

this introduce?

p) {

© O. Nierstrasz — U. Berne

Bundling Atomicit❑ Consider adding synchronized meth

sequences of actions as a single ato

public interface Procedure { // apply an operatipublic void apply(Object x);

}public class ExpandableArrayV2 extends Expandabl

public ExpandableArrayV2(int cap) { super(cap

}

✎ What possible liveness problems does

public synchronized void applyToAll(Procedurefor (int i = 0; i < size_; ++i) {

p.apply(data_[i]);}

}

Page 110: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 104.

Safety Patterns

sedures:

(100);// fill it up

// print all elements

ject must be

{

© O. Nierstrasz — U. Berne

Using inner classeUse anonymous inner classes to pass procclass ExpandableArrayUser {

public static void main(String[] args) {ExpandableArrayV2 a = new ExpandableArrayV2for (int i = 0; i < 100; ++i)

a.append(new Integer(i)); a.applyToAll(

)}

}

NB: Any variables shared with the host obdeclared final (immutable).

new Procedure () {public void apply(Object x)

System.out.println(x); }

}

Page 111: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 105.

Safety Patterns

nization

ng only within

nd immutable

ritical section” that that does not.

© O. Nierstrasz — U. Berne

Pattern: Partial Synchro

Intent: Reduce overhead by synchronizi“critical sections”.

Applicability❑ When objects have both mutable a

instance variables.

❑ When methods can be split into a “cdeals with mutable state and a part

Page 112: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 106.

Safety Patterns

esign steps

ors to atomic or

s that access r, already

block access to mutable cal section

© O. Nierstrasz — U. Berne

Partial Synchronization — d❑ Fully synchronize all methods

❑ Remove synchronization for accessimmutable values

❑ Remove synchronization for methodmutable state through a single othesynchronized method

❑ Replace method synchronization bysynchronization for methods wherestate is restricted to a single, criti

Page 113: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 107.

Safety Patterns

lls

doubles are not atomic!ed

t) {

alue_; } value_ = v; }

synched!t_ is immutable

© O. Nierstrasz — U. Berne

Example: LinkedCepublic class LinkedCell {

protected double value_; // NB:protected final LinkedCell next_; // fix

public LinkedCell (double val, LinkedCell nexvalue_ = val; next_ = next;

}

public double value() { return vpublic void setValue(double v) {

// not// nex

...

synchronizedsynchronized

public LinkedCell next() {return next_;

}

Page 114: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 108.

Safety Patterns

ent valuesnized accessor

rch for xch to access value

© O. Nierstrasz — U. Berne

Example ...

...public double sum() { // add up all elem

// get via synchroif (next() != null)

v += next().sum();return v;

}

public boolean includes(double x) { // sea// syn

if (next() == null) return false;else return next().includes(x);

}}

double v = value();

synchronized(this) {if (value_ == x) return true;

}

Page 115: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 109.

Safety Patterns

nt

d variables. nside other objects ime.

to the embedded

eptualized as

© O. Nierstrasz — U. Berne

Pattern: Containme

Intent: Achieve safety by avoiding shareUnsynchronized objects are “contained” ithat have at most one thread active at a t

Applicability❑ There is no need for shared access

objects.

❑ The embedded objects can be concexclusively held resources.

Page 116: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 110.

Safety Patterns

red as islands — ts reachable only

reveal their

ns for compliance.

e postponements or cts must transiently

© O. Nierstrasz — U. Berne

Applicability ...❑ Embedded objects must be structu

communication-closed sets of objecfrom a single unique reference.

They cannot contain methods that identities to other objects.

❑ You are willing to hand-check desig

❑ You can deal with or avoid indefinitdeadlocks in cases where host objeacquire multiple resources.

Page 117: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 111.

Safety Patterns

ign steps host object.

or, a Composite, or a ed access to an

synchronized, or is

© O. Nierstrasz — U. Berne

Contained Objects — des❑ Define the interface for the outer

☞ The host could be, e.g., an AdaptProxy, that provides synchronizexisting, unsynchronized class

❑ Ensure that the host is either fullyin turn a contained object.

Page 118: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 112.

Safety Patterns

unique references to

s cannot leak outside

ations that ensure ally unique!

r clone contained re unique

© O. Nierstrasz — U. Berne

Design steps ...

❑ Define instances variables that are the contained objects.

☞ Make sure that these referencethe host!

☞ Establish policies and implementthat acquired references are re

☞ Consider methods to duplicate oobjects, to ensure that copies a

Page 119: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 113.

Safety Patterns

ip

l resources:

something that you

e has it.

then you no longer

will ever have it.

© O. Nierstrasz — U. Berne

Managed Ownersh

❑ Model contained objects as physica

☞ If you have one, then you can docouldn't do otherwise.

☞ If you have one, then no one els

☞ If you give one to someone else,have it.

☞ If you destroy one, then no one

Page 120: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 114.

Safety Patterns

...

among hosts, define

give, take, exchange

to manage transfer

© O. Nierstrasz — U. Berne

Managed Ownership

❑ If contained objects can be passeda transfer protocol.

☞ Hosts should be able to acquire, and forget resources

☞ Consider using a dedicated class

Page 121: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 115.

Safety Patterns

col classbetween threads:

res; }

{

?

n ref_; }

© O. Nierstrasz — U. Berne

A minimal transfer protoA simple buffer for transferring objects

public class ResourceVariable {protected Object ref_;public ResourceVariable(Object res) { ref_ = public Object public Object

Object old = ref_; ref_ = r; return old;

}}

✎ What are the weaknesses of this class✎ How would you fix them?

synchronized resource() { retursynchronized exchange(Object r)

Page 122: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 116.

Safety Patterns

ow!safe?ronized?

hod balk? than full

for synchronization?

© O. Nierstrasz — U. Berne

What you should kn✎ Why are immutable classes inherently ✎ Why doesn’t a “relay” need to be synch✎ What is “balking”? When should a met✎ When is partial synchronization better

synchronization?✎ How does containment avoid the need

Page 123: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 117.

Safety Patterns

estions?e methods as

explicitly named

dableArray methods

onization introduce?ate critical sections

synchronized or not?

© O. Nierstrasz — U. Berne

Can you answer these qu✎ When is it all right to declare only som

synchronized?✎ When is an inner class better than an

class?✎ What could happen if any of the Expan

were not synchronized?✎ What liveness problems can full synchr✎ Why is it a bad idea to have two separ

in a single method?✎ Does it matter if a contained object is

Page 124: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 118.

Liveness and Deadlock

dlock

© O. Nierstrasz — U. Berne

5. Liveness and Dea

Overview❑ Safety revisited

☞ ERROR conditions❑ Liveness

☞ Progress Properties❑ Deadlock

☞ The Dining Philosophers problem☞ Detecting and avoiding deadlock

Selected material © Magee and Kramer

Page 125: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 119.

Liveness and Deadlock

ad happens

haviour

Rmmand -> ACTION),

spond -> ACTUATORmmand -> ERROR).

© O. Nierstrasz — U. Berne

Safety revisitedA safety property asserts that nothing b

ERROR process (-1) to detect erroneous be

Trace to ERROR: command command

command

command

respond

-1 0 1

ACTUATO= (co

ACTION= (re|co

Page 126: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 120.

Liveness and Deadlock

ificationd

o specify directly

E_ACTUATOR:

SAFE_ACTUATOR andspondFE_ACTUATOR

© O. Nierstrasz — U. Berne

Safety — property specERROR conditions state what is not require

In complex systems, it is usually better twhat is required.

Trace to property violation in SAFcommand command

command

respond

command

respond

-1 0 1

property = (comm-> re-> SA).

Page 127: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 121.

Liveness and Deadlock

sic process that the alphabet of P is

a property are ty with a set of

rrect behaviour.tes the safety

ansparent.

© O. Nierstrasz — U. Berne

Safety propertieA safety property P defines a deterministasserts that any trace including actions inaccepted by P.

Transparency of safety properties: ❑ Since all actions in the alphabet of

eligible choices, composing a properprocesses does not affect their co

❑ If a behaviour can occur which violaproperty, then ERROR is reachable.

Properties must be deterministic to be tr

Page 128: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 122.

Liveness and Deadlock

sster, never occurs?

to include all the t.

© O. Nierstrasz — U. Berne

Safety propertieHow can we specify that some action, disa

property CALM = STOP + {disaster}.

A safety property must be specified so asacceptable, valid behaviours in its alphabe

disaster

-1 0

Page 129: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 123.

Liveness and Deadlock

g good eventually

ays the case that an

e name given to a an action is never

© O. Nierstrasz — U. Berne

LivenessA liveness property asserts that somethinhappens.

A progress property asserts that it is alwaction is eventually executed.

Progress is the opposite of starvation, thconcurrent programming situation in whichexecuted.

Page 130: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 124.

Liveness and Deadlock

s various kinds of

ent”)ess, but some

up

be

, each waiting for

© O. Nierstrasz — U. Berne

Liveness ProblemA program may be “safe”, yet suffer fromliveness problems:Starvation: (AKA “indefinite postponem

❑ The system as a whole makes progrindividual processes don’t

Dormancy:❑ A waiting process fails to be woken

Premature termination:❑ A process is killed before it should

Deadlock:❑ Two or more processes are blocked

resources held by another

Page 131: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 125.

Liveness and Deadlock

ir choicensitions is executed he set will be

toss

tails

1 2

s->heads->COINs->tails->COIN).

© O. Nierstrasz — U. Berne

Progress properties — faFair Choice: If a choice over a set of trainfinitely often, then every transition in texecuted infinitely often.

If a coin were tossed an infinite number of times, we would expect that both heads and tails would each be chosen infinitely often.

This assumes fair choice !

toss

heads

0

COIN = (tos|tos

Page 132: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 126.

Liveness and Deadlock

s

target system, ll be executed

© O. Nierstrasz — U. Berne

Progress propertieprogress P = {a1,a2..an}

asserts that in an infinite execution of a at least one of the actions a1,a2...an wiinfinitely often.

COIN system:progress HEADS = {heads} progress TAILS = {tails}

...

No progress violations detected.

Page 133: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 127.

Liveness and Deadlock

s trick coin

),

->tails->COIN).

ls}

toss

heads

4 5

© O. Nierstrasz — U. Berne

Progress propertieSuppose we have both a normal coin and a

TWOCOIN = (pick->COIN|pick->TRICKTRICK = (toss->heads->TRICK),COIN = (toss->heads->COIN|tossprogress HEADS = {heads}progress TAILS = {tails}progress HEADSorTAILS = {heads,tai

pick

pick toss

he ads

toss

tails

0 1 2 3

Page 134: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 128.

Liveness and Deadlock

ickads}

ery state is mutually the set.

roperty TAILS

toss

heads

4 5

© O. Nierstrasz — U. Berne

Progress analysisProgress violation: TAILSTrace to terminal set of states: pActions in terminal set: {toss, he

A terminal set of states is one in which evreachable but no transitions leads out of

The terminal set {1, 2} violates progress p

pick

pick toss

he ads

toss

tails

0 1 2 3

Page 135: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 129.

Liveness and Deadlock

locked utual exclusion.ld on to acquired ditional ones.cess, resources ased voluntarily.xists in which its successor in

© O. Nierstrasz — U. Berne

DeadlockFour necessary and sufficient conditions:

Serially reusable resources: the deadprocesses share resources under m

Incremental acquisition: processes horesources while waiting to obtain ad

No pre-emption: once acquired by a procannot be pre-empted but only rele

Wait-for cycle: a cycle of processes eeach process holds a resource whichthe cycle is waiting to acquire.

Page 136: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 130.

Liveness and Deadlock

B

Has B awaits C

Has C awaits D

© O. Nierstrasz — U. Berne

Waits-for cycle

A

CD

E

Has A awaits B

Has E awaits A

Has D awaits E

Page 137: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 131.

Liveness and Deadlock

e processesutgoing transitions

orth, south}orth north

2

orth->STOP)).

© O. Nierstrasz — U. Berne

Deadlock analysis - primitiv❑ A deadlocked state is one with no o❑ In FSP: STOP process

Progress violation for actions: {nTrace to terminal set of states: nActions in terminal set: {}

M OVEnorth north

south

0 1

MOVE = (north->(south->MOVE|n

Page 138: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 132.

Liveness and Deadlock

Problem

© O. Nierstrasz — U. Berne

The Dining Philosophers ❑ Philosophers alternate

between thinking and eating.

❑ A philosopher needs two forks to eat.

❑ No two philosophers may hold the same fork simultaneously.

❑ There must be no deadlock and no starvation.

❑ Want efficient behaviour under absence of contention.

Page 139: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 133.

Liveness and Deadlock

s

© O. Nierstrasz — U. Berne

Deadlocked diner

A deadlock occurs if a waits-for cycle arises in which each philosopher grabs one fork and waits for the other.

Page 140: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 134.

Liveness and Deadlock

and Livenessal safety and

sed by one mes two forks to eat

forks ...

forks to each

© O. Nierstrasz — U. Berne

Dining Philosophers, Safety Dining Philosophers illustrate many classicliveness issues:

Mutual Exclusion Each fork can be uphilosopher at a ti

Condition synchronization

A philosopher need

Shared variable communication

Philosophers share

Message-based communication

... or they can passother

Page 141: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 135.

Liveness and Deadlock

...poll for forks ...woken by a

n grab the left for the right ...one and wait (sleep)

starve if the left rs are always the forks

© O. Nierstrasz — U. Berne

Dining Philosophers Busy-waiting A philosopher can

Blocked waiting ... or can sleep till neighbour

Livelock All philosophers cafork and busy-wait

Deadlock ... or grab the left for the right

StarvationA philosopher mayand right neighboufaster at grabbing

Page 142: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 136.

Liveness and Deadlock

phers

N].right}:: ).

eat

FORK

© O. Nierstrasz — U. Berne

Modeling Dining PhilosoPHIL = ( sitdown

-> arise -> PHIL ).

FORK = ( get -> put -> FORK ).

||DINERS(N=5)=forall [i:0..N-1] (phil[i]:||{phil[i].left,phil[((i-1)+N)%

✎ Is this system safe? Is it live?

-> right.get -> left.get ->-> left.put -> right.put

PHIL

Page 143: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 137.

Liveness and Deadlock

alysis

e waits-for cycle

© O. Nierstrasz — U. Berne

Dining Philosophers AnTrace to terminal set of states:phil.0.sitdownphil.0.right.getphil.1.sitdownphil.1.right.getphil.2.sitdownphil.2.right.getphil.3.sitdownphil.3.right.getphil.4.sitdownphil.4.right.get

Actions in terminal set: {}

No further progress is possible due to th

Page 144: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 138.

Liveness and Deadlock

ckproaches to

les. When detected, ase its resources.s; the victim should

or cycle cannot

© O. Nierstrasz — U. Berne

Eliminating DeadloThere are two fundamentally different apeliminating deadlock.

Deadlock detection:❑ Repeatedly check for waits-for cyc

choose a victim and force it to rele☞ Common in transactional system

“roll-back” and try again

Deadlock avoidance:❑ Design the system so that a waits-f

possibly arise.

Page 145: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 139.

Liveness and Deadlock

utionsg Philosophers ramming styles and eness guarantees:

red fork first.

o sit

© O. Nierstrasz — U. Berne

Dining Philosopher SolThere are countless solutions to the Dininproblem that use various concurrent progpatterns, and offer varying degrees of liv

Number the forks❑ Philosophers grab the lowest numbe

Philosophers queue to sit down❑ allow no more than four at a time t

✎ Do these solutions avoid deadlock?✎ What about starvation?✎ Are they “fair”?

Page 146: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 140.

Liveness and Deadlock

ow!they modelled in

ccur in concurrent

a safety issue?it?

ditions for deadlock? you avoid it?

© O. Nierstrasz — U. Berne

What you should kn✎ What are safety properties? How are

FSP?✎ What kinds of liveness problems can o

programs?✎ Why is progress a liveness rather than✎ What is fair choice? Why do we need ✎ What is a terminal set of states?✎ What are necessary and sufficient con✎ How can you detect deadlock? How can

Page 147: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 141.

Liveness and Deadlock

estions? property?inistic to be

ss property?ation and deadlock?-for cycle?

© O. Nierstrasz — U. Berne

Can you answer these qu✎ How would you manually check a safety✎ Why must safety properties be determ

transparent?✎ How would you manually check a progre✎ What is the difference between starv✎ How would you manually detect a waits✎ What is fairness?

Page 148: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 142.

Liveness and Guarded Methods

Methods

© O. Nierstrasz — U. Berne

6. Liveness and Guarded

Overview❑ Guarded Methods

☞ Checking guard conditions☞ Handling interrupts☞ Structuring notification

➪ Encapsulating assignment➪ Tracking state➪ Tracking state variables➪ Delegating notifications

Page 149: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 143.

Liveness and Guarded Methods

ses to ensure liveness:

ely remove

ly add safety

e need for

avoid cyclic

© O. Nierstrasz — U. Berne

Achieving LivenesThere are various strategies and techniqu

❑ Start with safe design and selectivsynchronization

❑ Start with live design and selective

❑ Adopt design patterns that limit thsynchronization

❑ Adopt standard architectures thatdependencies

Page 150: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 144.

Liveness and Guarded Methods

thods thread when an equest, and wait for aising an exception).

Client 2

© O. Nierstrasz — U. Berne

Pattern: Guarded MeIntent: Temporarily suspend an incomingobject is not in the right state to fulfil a rthe state to change rather than balking (r

notifyAll()wait()

dec()

inc()

Client 1 BoundedCounter

Page 151: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 145.

Liveness and Guarded Methods

licabilityponement.

d states are sts), or if not, that it

occur after all consider a design

problems due to onization locks.

© O. Nierstrasz — U. Berne

Guarded Methods — app❑ Clients can tolerate indefinite post

(Otherwise, use a balking design.)

❑ You can guarantee that the requireeventually reached (via other requeis acceptable to block forever.

❑ You can arrange that notifications relevant state changes. (Otherwisebased on a busy-wait spin loop.)

❑ You can avoid or cope with livenesswaiting threads retaining all synchr

Page 152: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 146.

Liveness and Guarded Methods

cates describing the (Otherwise consider

within a single actional form.)

© O. Nierstrasz — U. Berne

Applicability ...❑ You can construct computable predi

state in which actions will succeed. an optimistic design.)

❑ Conditions and actions are managedobject. (Otherwise consider a trans

Page 153: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 147.

Liveness and Guarded Methods

ign stepsional loop to block All to wake up

ce() {

) { }

e ...

© O. Nierstrasz — U. Berne

Guarded Methods — desThe basic recipe is to use wait in a condituntil it is safe to proceed, and use notifyblocked threads.

public Object serviwhile (wrong State) {try { }catch (InterruptedException e

}// fill request and change stat

return result;}

synchronized

wait();

notifyAll();

Page 154: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 148.

Liveness and Guarded Methods

rom policy, so that classes can ing to different

; // min value0; // max valueN <= value() <= MAXue() == MINe() < MAXe() > MIN

© O. Nierstrasz — U. Berne

Step: Separate interface f❑ Define interfaces for the methods

implement guarded methods accordpolicies.

public BoundedCounter {public static final long MIN = 0public static final long MAX = 1public long value(); // inv’t: MI

// init: valpublic void inc(); // pre: valupublic void dec(); // pre: valu

}

interface

Page 155: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 149.

Liveness and Guarded Methods

ditionsescribes the proceed. er method.)

a guarded wait loop

ex) { ... }

a helper

© O. Nierstrasz — U. Berne

Step: Check guard con❑ Define a predicate that precisely d

conditions under which actions may(This can be encapsulated as a help

❑ Precede the conditional actions withof the form:

while (!condition)try { wait(); }catch (InterruptedException

Optionally, encapsulate this code asmethod.

Page 156: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 150.

Liveness and Guarded Methods

tions ...ion to check in this nd notifications are ue, then there is no r returning from

stent state (i.e., the ng any wait (since ck).

form the guards

© O. Nierstrasz — U. Berne

Step: Check guard condi❑ If there is only one possible condit

class (and all plausible subclasses), aissued only when the condition is trneed to re-check the condition aftewait()

❑ Ensure that the object is in a consiclass invariant holds) before enteriwait releases the synchronization loThe easiest way to do this is to perbefore taking any actions.

Page 157: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 151.

Liveness and Guarded Methods

uptsrruptedExceptions.

catch clause), which expense of liveness.top). This preserves commended.)g an exception. This re the caller to take y.

e proceeding. e guard can never llaborating threads

© O. Nierstrasz — U. Berne

Step: Handle interr❑ Establish a policy to deal with Inte

Possibilities include::☞ Ignore interrupts (i.e., an empty

preserves safety at the possible☞ Terminate the current thread (s

safety, though brutally! (Not re☞ Exit the method, possibly raisin

preserves liveness but may requispecial action to preserve safet

☞ Cleanup and restart.☞ Ask for user intervention befor

Interrupts can be useful to signal that thbecome true because, for example, the cohave terminated.

Page 158: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 152.

Liveness and Guarded Methods

anges

od of the class that ffect the value of a

eads that are ject.

© O. Nierstrasz — U. Berne

Step: Signal state ch

❑ Add notification code to each methchanges state in any way that can aguard condition. Some options are:

☞ use notifyAll to wake up all thrblocked in waits for the host ob

...

Page 159: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 153.

Liveness and Guarded Methods

ll()

hread (if any exist). ization where:sarily waiting for me notifications, led by any given

of them becomes

se notification yAll. (For example, to provide certain

© O. Nierstrasz — U. Berne

Notify() vs notifya...☞ use notify to wake up only one t

This is best treated as an optim➪ all blocked threads are neces

conditions signalled by the sa➪ only one of them can be enab

notification, and ➪ it does not matter which one

enabled.

☞ You build your own special-purpomethods using notify and notifto selectively notify threads, orfairness guarantees.)

Page 160: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 154.

Liveness and Guarded Methods

ationsy at least one

end of every y state change (i.e., ble).ay cause

o each variable ndition in a helper

e notification after

© O. Nierstrasz — U. Berne

Step: Structure notific❑ Ensure that each wait is balanced b

notification. Options include:

Blanket Notifications

Place a notification at themethod that can cause anassigns any instance variaSimple and reliable, but mperformance problems ...

Encapsulating Assignment

Encapsulate assignment tmentioned in any guard comethod that performs thupdating the variable.

Page 161: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 155.

Liveness and Guarded Methods

or the particular actually unblock rove performance, (i.e., subclassing

able that

nges state, invoke evaluates the e notifications if cted.intain aspects of ers issue the

© O. Nierstrasz — U. Berne

Tracking State

Only issue notifications fstate changes that couldwaiting threads. May impat the cost of flexibility becomes harder.)

Tracking State

Variables

Maintain an instance varirepresents control state.Whenever the object chaa helper method that re-control state and will issuguard conditions are affe

Delegating Notifications

Use helper objects to mastate and have these helpnotifications.

Page 162: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 156.

Liveness and Guarded Methods

ent in helper methods:

return count_; }

© O. Nierstrasz — U. Berne

Encapsulating assignmGuards and assignments are encapsulatedpublic class BoundedCounterV1

implements BoundedCounter {protected long count_ = MIN;public synchronized long value() {public synchronized void inc() {

}public synchronized void dec() {awaitDecrementable();setCount(count_ - 1);

}

awaitIncrementable(); setCount(count_ + 1);

Page 163: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 157.

Liveness and Guarded Methods

ncrementable() {

ecrementable() {

{ };

t(long newValue) {

};

© O. Nierstrasz — U. Berne

synchronized void awaitI

}protected synchronized void awaitDwhile (count_ <= MIN)try { wait(); }catch(InterruptedException ex)

} synchronized void setCoun

}}

protectedwhile (count_ >= MAX)try { wait(); }catch(InterruptedException ex) {

protectedcount_ = newValue;notifyAll();

Page 164: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 158.

Liveness and Guarded Methods

ect waiting threads tes top and bottom:

...

) {};

left bottom state

© O. Nierstrasz — U. Berne

Tracking StateThe only transitions that can possibly affare those that step away from logical stapublic class BoundedCounterVST

implements BoundedCounter {protected long count_ = MIN; // public synchronized void inc() {while (count_ == MAX)try { wait(); }catch(InterruptedException ex

// just }...

}

if (count_++ == MIN)notifyAll();

Page 165: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 159.

Liveness and Guarded Methods

bles

logical states

/ state variable

lt logical state

) {};y actual statelogical state

© O. Nierstrasz — U. Berne

Tracking State Variapublic class BoundedCounterVSV

implements BoundedCounter {static final int ; // static final int MIDDLE = 1;static final int TOP = 2;protected int ; /protected long count_ = MIN;public synchronized void inc() {while ( ) // consutry { wait(); }catch(InterruptedException ex

++count_; // modif; // sync

} ...

BOTTOM = 0

state_ = BOTTOM

state_ == TOP

checkState()

Page 166: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 160.

Liveness and Guarded Methods

... }{ return count_; }

{

= BOTTOM; = TOP; = MIDDLE;

kState()

))

© O. Nierstrasz — U. Berne

...public synchronized void dec() {public synchronized long value()

synchronized void int oldState = state_;if (count_ == MIN) state_else if (count_ == MAX) state_else state_

}}

protected chec

if (state_ != oldState&& (oldState == TOP|| oldState == BOTTOM

notifyAll();

Page 167: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 161.

Liveness and Guarded Methods

ions

ong v) {

{ return value_; }

; }

: must be synched!

© O. Nierstrasz — U. Berne

Delegating notificatpublic class NotifyingLong {private long value_;private Object observer_;public NotifyingLong(Object o, l

value_ = v; }public synchronized long value() public void setValue(long v) {synchronized(this) { value_ = v

// NB

}}

observer_ = o;

synchronized(observer_) { observer_.notifyAll();

}

Page 168: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 162.

Liveness and Guarded Methods

ns ...ject:

) {};

© O. Nierstrasz — U. Berne

Delegating notificatioNotification is delegated to the helper obpublic class BoundedCounterVNL

implements BoundedCounter {private NotifyingLong c_ = new NotifyingLong(this, MIN);

public synchronized void inc() {while (c_.value() >= MAX)try { wait(); }catch(InterruptedException ex

}...

}

c_.setValue(c_.value()+1);

Page 169: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 163.

Liveness and Guarded Methods

ow!ods pattern?onditions after

ll() to notify()?ication?ariant before calling

n

ing state and using

© O. Nierstrasz — U. Berne

What you should kn✎ When can you apply the Guarded Meth✎ When should methods recheck guard c

waking from a wait()?✎ Why should you usually prefer notifyA✎ When and where should you issue notif✎ Why must you re-establish the class inv

wait()?✎ What should you do when you receive a

InterruptedException?✎ What is the difference between track

state-tracking variables?

Page 170: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 164.

Liveness and Guarded Methods

estions?n balking?

o implement guarded

rded methods for a others to define

notifications

© O. Nierstrasz — U. Berne

Can you answer these qu✎ When are guarded methods better tha✎ When should you use helper methods t

methods?✎ What is the best way to structure gua

class if you would like it to be easy forcorrectly functioning subclasses?

✎ When is the complexity of delegating worthwhile?

Page 171: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 165.

Lab session I

I

course web page:

scar/cp/

© O. Nierstrasz — U. Berne

7. Lab session

The lab exercises will be available on the

matsu-www.is.titech.ac.jp/~o

Page 172: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 166.

Liveness and Asynchrony

chrony

eways

© O. Nierstrasz — U. Berne

8. Liveness and Asyn

Overview❑ Asynchronous invocations

☞ Simple Relays➪ Direct Invocations➪ Thread-based messages; Gat➪ Command-based messages

☞ Tail calls☞ Early replies☞ Futures

Page 173: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 167.

Liveness and Asynchrony

vocationse serviced by

services amongst

ly need the result of ul work. asynchronous, ed using threads. d methods are split d reduce liveness

© O. Nierstrasz — U. Berne

Pattern: Asynchronous InIntent: Avoid waiting for a request to bdecoupling sending from receiving.

Applicability❑ When a host object can distribute

multiple helper objects.❑ When an object does not immediate

an invocation to continue doing usef❑ When invocations that are logically

regardless of whether they are cod❑ During refactoring, when classes an

in order to increase concurrency anproblems.

Page 174: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 168.

Liveness and Asynchrony

— forme this:

before invocationion in parallel after completion

© O. Nierstrasz — U. Berne

Asynchronous InvocationsAsynchronous invocation typically looks lik

class Host {public service() {pre(); // code to run

// the invocatduring(); // code to runpost(); // code to run

}}

invokeHelper();

Page 175: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 169.

Liveness and Asynchrony

design steps

f, e.g., the Helper ns results directly e Host’s caller!t depend on the kind quest ...n the during() code

f service() is ed or if pre() es the Host’s state

© O. Nierstrasz — U. Berne

Asynchronous Invocations — Consider the following issues:

Does the Host need results back from the Helper?

Not ireturto th

Can the Host process new requests while the Helper is running?

Mighof re

Can the Host do something while the Helper is running?

i.e., i

Does the Host need to synchronize pre-invocation processing?

i.e., iguardupdat

Page 176: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 170.

Liveness and Asynchrony

f post() updates ost’s state

does the host have it for other tions?ew one generated lp with each new ce request?

© O. Nierstrasz — U. Berne

Does the Host need to synchronize post-invocation processing?

i.e., ithe H

Does post-invocation processing only depend on the Helper’s result?

... or to wacondi

Is the same Helper always used? Is a nto heservi

Page 177: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 171.

Liveness and Asynchrony

variants by delegating to the ost() actions.

directly, but

thread to

equest to

© O. Nierstrasz — U. Berne

Simple Relays — three A relay method obtains all its functionalityhelper, without any pre(), during(), or p

Direct invocations: Invoke the Helper without synchronization

Thread-based messages: Create a newinvoke the Helper

Command-based messages: Pass the ranother object that will run it

Relays are commonly seen in Adaptors.

Page 178: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 172.

Liveness and Asynchrony

tionsonization.

elper();synchronized!tateless method)

synchronized!

s, while the Host’s

© O. Nierstrasz — U. Berne

Variant: Direct invocaAsynchrony is achieved by avoiding synchrclass Host {protected Helper helper_ = new Hpublic void service() { // uninvokeHelper(); // (s

}protected void invokeHelper() {helper_.help(); // un

}}

The Host is free to accept other requestcaller must wait for the reply.

Page 179: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 173.

Liveness and Asynchrony

...d with an accessor:

elper();lper() {

chronizedally synchronized

© O. Nierstrasz — U. Berne

Direct invocations If helper_ is mutable, it can be protecte

class Host2 extends Host {protected Helper helper_ = new Hprotected Helper hereturn helper_;

}public void service() { // unsynhelper().help(); // parti

}}

synchronized

Page 180: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 174.

Liveness and Asynchrony

essages new thread:

/ An inner class/ Must be final!; }

© O. Nierstrasz — U. Berne

Variant: Thread-based mThe invocation can be performed within a

protected void invokeHelper() { { /

Helper h_ = helper_; /public void

} ;}

new Thread()final

run() { h_.help() .start()

Page 181: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 175.

Liveness and Asynchrony

es ...d outweigh the

dlessly)

are invoked

© O. Nierstrasz — U. Berne

Thread-based messagThe cost of evaluating Helper.help() shouloverhead of creating a thread!

❑ If the Helper is a daemon (loops en

❑ If the Helper does I/O

❑ Possibly, if multiple helper methods

Page 182: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 176.

Liveness and Asynchrony

tewayservice each request.

le, byte[] data) {

}

{ld arguments

te[] data) { ... }ite to file ...

e, data)).start();

le

© O. Nierstrasz — U. Berne

Thread-per-message GaThe Host may construct a new Helper to spublic class FileIO {public void writeBytes(String fi

}public void readBytes(...) { ...

}class FileWriter private String nm_; // hoprivate byte[] d_;public FileWriter(String name, by

// wr}

new Thread (new FileWriter(fil

implements Runnab

public void run() { ... }

Page 183: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 177.

Liveness and Asynchrony

messages a queue for another

ul for:

ks

));

© O. Nierstrasz — U. Berne

Variant: Command-based The Host can also put a Command object inobject that will invoke the Helper:

protected q_;protected invokeHelper() {

}

Command-based forms are especially usef❑ scheduling of helpers❑ undo and replay capabilities❑ transporting messages over networ

EventQueue

q_.put(new HelperMessage(helper_

Page 184: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 178.

Liveness and Asynchrony

t statement of a

// not synched// synched// not synched

// synched

// not synched

t new requests

© O. Nierstrasz — U. Berne

Tail callsApplies when the helper method is the lasmethod. Only pre() code is synchronized.class Subject {

protected Observer obs_ = new ...;protected double state_;public void updateState(double d) {

}protected doUpdate(double d) {

state_ = d;}protected void sendNotification() {

obs_.changeNotification(this);}

}

The host is immediately available to accep

doUpdate(d);sendNotification();

synchronized

Page 185: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 179.

Liveness and Asynchrony

reads a separate thread:

te(double d) {

.this);

© O. Nierstrasz — U. Berne

Tail calls with new thAlternatively, the tail call may be made in

public void updateStastate_ = d;

{ Observer o_ = obs_;

public void {o_.changeNotification(Subject

}} ;

}

synchronized

new Thread()final

run()

.start()

Page 186: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 180.

Liveness and Asynchrony

l activities after

gramming languages. built-in feature.

Host retains synchronization!

© O. Nierstrasz — U. Berne

Early ReplyEarly reply allows a host to perform usefureturning a result to the client:

Early reply is a built-in feature in some proIt can be easily simulated when it is not a

service()

reply

Client Host

Page 187: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 181.

Liveness and Asynchrony

plyhe reply from a

that can be used to abstractions ...

newstart()

put()

Helper

© O. Nierstrasz — U. Berne

Simulating Early ReA one-slot buffer can be used to pick up thelper thread:

A one-slot buffer is a simple abstraction implement many higher-level concurrency

service()

reply

new

get()

Slot

HostClient

Page 188: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 182.

Liveness and Asynchrony

a

unsynchronized

Helper

;retain lock

early reply

© O. Nierstrasz — U. Berne

Early Reply in Javpublic class Host { ...public Object service() { // final Slot reply = new Slot();final Host host = this;

{ // public void run() {

{

host.cleanup(); // } }

}.start();; //

} ... }

new Thread()

synchronized (host)reply.put(host.compute())

return reply.get()

Page 189: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 183.

Liveness and Asynchrony

el with a host until

t()

wFuture

© O. Nierstrasz — U. Berne

FuturesFutures allow a client to continue in parallthe future value is needed:

puvalue()

service()ne

HostClient

returns future

returns value

Page 190: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 184.

Liveness and Asynchrony

bstraction around a

ly nullwith some worker

© O. Nierstrasz — U. Berne

A Future ClassFutures can be implemented as a layer of ashared Slot:class Future {private Object val_; // initialprivate Slot slot_; // shared public Future(Slot slot) {slot_ = slot;

}public Object value() {

return val_;}

}

if (val_ == null)val_ = slot_.get();

Page 191: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 185.

Liveness and Asynchrony

vant must explicitly

unsynchronized

ute() { ... }

© O. Nierstrasz — U. Berne

Using Futures in JaWithout special language support, the clierequest a value() from the future object.public Future service () { // final Slot slot = new Slot();new Thread() {public void run() {

;}

}.start();;

}protected Object comp

slot.put(compute())

return new Future(slot)

synchronized

Page 192: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 186.

Liveness and Asynchrony

ow!us invocation take?ronous invocations?e “asynchronous”?

sses to implement

you use it?u use them?eplies in Java?

© O. Nierstrasz — U. Berne

What you should kn✎ What general form does an asynchrono✎ When should you consider using asynch✎ In what sense can a direct invocation b✎ Why (and how) would you use inner cla

asynchrony?✎ What is “early reply”, and when would ✎ What are “futures”, and when would yo✎ How can implement futures and early r

Page 193: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 187.

Liveness and Asynchrony

estions?rrency on a single-

as thread-per-

s we have discussed slot-buffers as the

plies? Vice versa?

© O. Nierstrasz — U. Berne

Can you answer these qu✎ Why might you want to increase concu

processor machine?✎ Why are servers commonly structured

message gateways?✎ Which of the concurrency abstraction

till now can be implemented using one-only synchronized objects?

✎ When are futures better than early re

Page 194: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 188.

Condition Objects

cts

© O. Nierstrasz — U. Berne

9. Condition Obje

Overview❑ Condition Objects

☞ Simple Condition Objects☞ The “Nested Monitor Problem”☞ Permits and Semaphores☞ Using Semaphores

Page 195: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 189.

Condition Objects

jectse waits and

ing waiting and

unding the use of e cases the use of

ather than decrease

© O. Nierstrasz — U. Berne

Pattern: Condition ObIntent: Condition objects encapsulate thnotifications used in guarded methods.

Applicability❑ To simplify class design by off-load

notification mechanics.☞ Because of the limitations surro

condition objects in Java, in somcondition objects will increase rdesign complexity!

Page 196: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 190.

Condition Objects

licability

ften avoid notifying ssibly proceed given

l scheduling policies ple to impose

itions take the form

© O. Nierstrasz — U. Berne

Condition Objects — app❑ As an efficiency manoeuvre.

☞ By isolating conditions, you can owaiting threads that could not poa particular state change.

❑ As a means of encapsulating speciasurrounding notifications, for examfairness or prioritization policies.

❑ In the particular cases where condof “permits” or “latches”.

Page 197: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 191.

Condition Objects

se:

r some conditionthat condition

il another object

© O. Nierstrasz — U. Berne

Condition ObjectCondition objects implement this interfac

public interface Condition { public void (); // wait fopublic void (); // signal

}

A client that awaits a condition blocks untsignals that the condition now may hold.

awaitsignal

Page 198: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 192.

Condition Objects

bject this class:

{

{}

) {

itor Problem”

© O. Nierstrasz — U. Berne

A Simple Condition OWe can encapsulate guard conditions withpublic class SimpleConditionObject

implements Condition { public void ()try { ; }catch (InterruptedException ex)

}public void (

(); }

}

Careless use can lead to the “Nested Mon

synchronized awaitwait()

synchronized signalnotifyAll

Page 199: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 193.

Condition Objects

roblemeads by separately

ax:

;

ject(); {

bject()

© O. Nierstrasz — U. Berne

The Nested Monitor pWe want to avoid waking up the wrong thrnotifying the conditions notMin and notMpublic class BoundedCounterVBAD implements BoundedCounter {protected long count_ = MIN; protected Condition

protected ConditionnotMax_ = new SimpleConditionOb

public synchronized long value()return count_;

}...

notMin_ = new SimpleConditionO

Page 200: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 194.

Condition Objects

blem ...

till count not MIN

// can’t get in!

ver get here!

© O. Nierstrasz — U. Berne

The Nested Monitor propublic void dec() {while (count_ == MIN)

; // wait if (count_-- == MAX)

;}public void inc() {while (count_ == MAX)notMax_.await();

if (count_++ == MIN); // we ne

}}

synchronized

notMin_.await()

notMax_.signal()

synchronized

notMin_.signal()

Page 201: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 195.

Condition Objects

blem ...

a blocked thread e method that would k the wait.

dition is signalled

wait()

wait()

D

SimpleConditionObject

© O. Nierstrasz — U. Berne

The Nested Monitor pro

Nested monitor lockouts occur whenever holds the lock for an object containing thotherwise provide a notification to unbloc

So connever

adec()

inc()

Client 1 Client 2 BoundedCounterVBA

Counter is still locked!

Page 202: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 196.

Condition Objects

FSPsynchronized object

lot).

protocol using a

-> ReplySlotReplySlot ).k

© O. Nierstrasz — U. Berne

Nested Monitors in Nested Monitors typically arise when one is implemented using another.

Recall our one Slot buffer in FSP:const N = 2Slot = (put[v:0..N] -> get[v] -> S

Suppose we try to implement a call/reply private instance of Slot:ReplySlot =( -> my.put[v] -> | get -> my.get[v] -> ret[v] ->

put[v:0..N] ac

Page 203: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 197.

Condition Objects

P ...ew protocol:

oducer ).

nsumer ).

||Consumer).:Slot

© O. Nierstrasz — U. Berne

Nested Monitors in FSOur producer/consumer chain obeys the n

Producer = ( put[0] -> ack-> put[1] -> ack -> put[2] -> ack -> Pr

Consumer = ( get-> ret[x:0..N]->Co

||Chain = (Producer||ReplySlot||my

Page 204: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 198.

Condition Objects

P ...

ut.0, ack, put.1,2, get, my.get.2,

© O. Nierstrasz — U. Berne

Nested Monitors in FSBut now the chain may deadlock:

Progress violation for actions: {pput.2, my.put.0, my.put.1, my.put.ret.2...........}Trace to terminal set of states:getret.0

Actions in terminal set: {}

Page 205: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 199.

Condition Objects

rs problem

zation is held on the

everses the ty version.

d be enclosed within ition object.

© O. Nierstrasz — U. Berne

Solving the Nested MonitoYou must ensure that:

❑ Waits do not occur while synchronihost object.☞ This leads to a guard loop that r

synchronization seen in the faul

❑ Notifications are never missed.☞ The entire guard wait loop shoul

synchronized blocks on the cond...

Page 206: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 200.

Condition Objects

rs ...

rmed only upon xcept for the

istent.ny state, it must f the host, and if it that access is

© O. Nierstrasz — U. Berne

Solving Nested Monito...

❑ Notifications do not deadlock.☞ All notifications should be perfo

release of all synchronization (enotified condition object).

❑ Helper and host state must be cons☞ If the helper object maintains a

always be consistent with that oshares any state with the host, properly synchronized.

Page 207: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 201.

Condition Objects

dCounter { ...ynched!d notification condition on condition objectuard loop

and act

e host synch before wait

release all synchs!

© O. Nierstrasz — U. Berne

Example solutionpublic class BoundedCounterVCV implements Bounde

public void dec() { // not sboolean wasMax = false; // recor

{ // synchwhile (true) { // new g

{if (count_ > MIN) { // check

wasMax = (count_ == MAX);count_--;break;

}}

; // releas}

}if (wasMax) ; // first

}}

synchronized(notMin_)

synchronized(this)

notMin_.await()

notMax_.signal()

Page 208: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 202.

Condition Objects

aphoresition object when counter.

only if there have

signal increments s”. of missed signals.

oke Condition ode.

semaphores work ait after another proceed.

© O. Nierstrasz — U. Berne

Pattern: Permits and SemIntent: Bundle synchronization in a condsynchronization depends on the value of aApplicability

❑ When any given await may proceedbeen more signals than awaits.☞ I.e., when await decrements and

the number of available “permit❑ You need to guarantee the absence

❑ The host classes can arrange to invmethods outside of synchronized c

Unlike simple condition objects,even if one thread enters its awthread has signalled that it may

Page 209: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 203.

Condition Objects

design stepsion that maintains a ses await if there

ents Condition {

();

inc(); }ec(); }

© O. Nierstrasz — U. Berne

Permits and Semaphores — ❑ Define a class implementing Condit

permit count, and immediately releaare already enough permits.☞ e.g., BoundedCounter

public class CountCondition implemprotected BoundedCountercounter_ = new BoundedCounterV0

public void public void signal() { counter_.

}

await() { counter_.d

Page 210: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 204.

Condition Objects

s, their clients must ronized code. gn of the form:

synchedched m1() synched

... }

© O. Nierstrasz — U. Berne

Design steps ...❑ As with all kinds of condition object

avoid invoking await inside of synch☞ You can use a before/after desi

class Host {Condition aCondition_; ...public method m1() {

; // notdoM1(); // synfor each Condition c enabled by

; // not}protected doM1() {

}

aCondition_.await()

c.signal()

synchronized

Page 211: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 205.

Condition Objects

s)permits”l if class is final

iting on a

in separate methodsck so locks can be

d always stays true

© O. Nierstrasz — U. Berne

VariantsPermit Counters: (Counting Semaphore

❑ Just keep track of the number of “❑ Can use notify instead of notifyAl

Fair Semaphores:❑ Maintain FIFO queue of threads wa

SimpleCondition

Locks and Latches:❑ Locks can be acquired and released❑ Keep track of thread holding the lo

reentrant!❑ A latch is set to true by signal, an

See the On-line supplement for details!

Page 212: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 206.

Condition Objects

va version

value = initial; }// AKA V

t one thread!

{ // AKA P

) { };

© O. Nierstrasz — U. Berne

Semaphores in Japublic class Semaphore { // simpleprivate int value;public Semaphore (int initial) {

public void up() {++value;

; // wake up jus}

public void down() while (value==0)try { ; }catch(InterruptedException ex

--value;}

}

synchronized

notify()

synchronized

wait()

Page 213: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 207.

Condition Objects

s

mber of itemsmber of slots

© O. Nierstrasz — U. Berne

Using Semaphorepublic class BoundedCounterVSem

implements BoundedCounter {protected long count_ = MIN;protected Semaphore mutex;protected Semaphore full; // nuprotected Semaphore empty; // nu

BoundedCounterVSem() {mutex = new Semaphore(1);

;empty = new Semaphore(MAX-MIN);

}...

full = new Semaphore(0)

Page 214: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 208.

Condition Objects

...

e resource

it

slote is important!

an item

© O. Nierstrasz — U. Berne

Using Semaphores public long value() {

; // grab thlong val = count_;

; // releasereturn val;

}public void inc() {

; // grab a ; // sequenc

count_ ++;;; // release

}...

mutex.down()

mutex.up()

empty.down()mutex.down()

mutex.up()full.up()

Page 215: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 209.

Condition Objects

...lem!

locks out BADdec!

locks out BADinc!

© O. Nierstrasz — U. Berne

Using Semaphores These would cause a nested monitor prob

public void BADinc() { //

count_ ++;full.up(); mutex.up();

}

public void BADdec() { //

count_ --;empty.up(); mutex.up();

}

mutex.down(); empty.down();

mutex.down(); full.down();

Page 216: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 210.

Condition Objects

ow! they make your life

? lems?n is it natural to use

imple condition

y() instead of

© O. Nierstrasz — U. Berne

What you should kn✎ What are “condition objects”? How can

easier? Harder?✎ What is the “nested monitor problem”✎ How can you avoid nested monitor prob✎ What are “permits” and “latches”? Whe

them?✎ How does a semaphore differ from a s

object?✎ Why (when) can semaphores use notif

notifyAll()?

Page 217: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 211.

Condition Objects

estions?ed any instance

ested monitor

violate? semaphores (in

res?

© O. Nierstrasz — U. Berne

Can you answer these qu✎ Why doesn’t SimpleConditionObject ne

variables?✎ What is the easiest way to avoid the n

problem?✎ What assumptions do nested monitors✎ How can the obvious implementation of

Java) violate fairness?✎ How would you implement fair semapho

Page 218: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 212.

Fairness and Optimism

timism

© O. Nierstrasz — U. Berne

10. Fairness and Op

❑ Concurrently available methods☞ Priority☞ Interception☞ Readers and Writers

❑ Optimistic methods

Selected material © Magee and Kramer

Page 219: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 213.

Fairness and Optimism

ble Methodsde concurrently le and disable unning methods.

different threads. terdependent, so al exclusion. r some methods by

ntal or malicious er holding its lock. ly make host objects problems.

© O. Nierstrasz — U. Berne

Pattern: Concurrently AvailaIntent: Non-interfering methods are maavailable by implementing policies to enabmethods based on the current state and rApplicability

❑ Host objects are accessed by many❑ Host services are not completely in

need not be performed under mutu❑ You need to improve throughput fo

eliminating nonessential blocking.❑ You want to prevent various accide

starvation due to some client forev❑ Full synchronization would needless

prone to deadlock or other liveness

Page 220: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 214.

Fairness and Optimism

sign stepshanism by:

ly?hod is invoked? tasks?

d enforce policy.

lic messages and ate conditions to rform the actions.

© O. Nierstrasz — U. Berne

Concurrent Methods — deLayer concurrency control policy over mecPolicy Definition:

❑ When may methods run concurrent❑ What happens when a disabled met❑ What priority is assigned to waiting

Instrumentation: ❑ Define state variables to detect an

Interception: ❑ Have the host object intercept pub

then relay them under the appropriprotected methods that actually pe

Page 221: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 215.

Fairness and Optimism

instance variables). st, price, or urgency. me condition. ed to a queue. aiting task will

letion of each task. h task. sks. pleted.

© O. Nierstrasz — U. Berne

PriorityPriority may depend on any of:

❑ Intrinsic attributes of tasks (class &❑ Representations of task priority, co❑ The number of tasks waiting for so❑ The time at which each task is add❑ Fairness — guarantees that each w

eventually run. ❑ Expected duration or time to comp❑ The desired completion time of eac❑ Termination dependencies among ta❑ The number of tasks that have com❑ The current time.

Page 222: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 216.

Fairness and Optimism

finitions of fairness:ly makes a d.equest infinitely

quest, it will be s granted the

s makes a hat of any

© O. Nierstrasz — U. Berne

FairnessThere are subtle differences between deWeak fairness: If a process continuous

request, eventually it will be granteStrong fairness: If a process makes a r

often, eventually it will be granted.Linear waiting: If a process makes a re

granted before any other process irequest more than once.

FIFO (first-in first out): If a procesrequest, it will be granted before tprocess making a later request.

Page 223: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 217.

Fairness and Optimism

t of immutable imply relays all nized methods.

class, split the th subsets of

s contain g calls to non-form the

© O. Nierstrasz — U. Berne

InterceptionInterception strategies include:Pass-Throughs: The host maintains a se

references to helper objects and smessages to them within unsynchro

Lock-Splitting: Instead of splitting thesynchronization locks associated withe state.

Before/After methods: Public methodbefore/after processing surroundinpublic methods in the host that perservices.

Page 224: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 218.

Fairness and Optimism

Writersurrency control accessors) may ters” (mutative, ive access..

()

ite()

Writer1 Writer2

© O. Nierstrasz — U. Berne

Concurrent Reader and “Readers and Writers” is a family of concdesigns in which “Readers” (non-mutating concurrently access resources while “Wristate-changing operations) require exclus

read()write

read()

read()

wr

Reader1 Reader2 Host

Page 225: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 219.

Fairness and Optimism

odelets access:seRead,

DER )

TER )

© O. Nierstrasz — U. Berne

Readers/Writers MWe are interested only in capturing who gset Actions = { acquireRead, releaacquireWrite, releaseWrite}

READER = (-> examine-> -> REA

+Actions \{examine}.

WRITER = ( acquireWrite-> modify-> releaseWrite -> WRI

+Actions \{modify}.

acquireRead

releaseRead

Page 226: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 220.

Fairness and Optimism

colimum readersimum writers

=

aders+1][writing]aders-1][writing]

aders][True]aders][False]

© O. Nierstrasz — U. Berne

A Simple RW Protoconst Nread = 2 // Maxconst Nwrite = 2 // Max

RW_LOCK = RW[0][False],RW[readers:0..Nread][writing:Bool]( when (!writing)

acquireRead -> RW[re| releaseRead -> RW[re| when (readers==0 && !writing)

acquireWrite -> RW[re| releaseWrite -> RW[re).

Page 227: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 221.

Fairness and Optimism

s

DING[1] TING ),

DING[i+1]DING[i-1]E_RW

E_RW ).

© O. Nierstrasz — U. Berne

Safety propertieWe specify the safe interactions:property SAFE_RW =( acquireRead -> REA| acquireWrite -> WRI

READING[i:1..Nread] = ( acquireRead -> REA| when(i>1) releaseRead -> REA| when(i==1) releaseRead -> SAF),

WRITING = ( releaseWrite -> SAF

Page 228: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 222.

Fairness and Optimism

...

_RW).

© O. Nierstrasz — U. Berne

Safety properties And compose them with RW_LOCK:||READWRITELOCK = (RW_LOCK || SAFE

Page 229: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 223.

Fairness and Optimism

d Writers with the protocol

LOCK).

© O. Nierstrasz — U. Berne

Composing the Readers anWe compose the READERS and WRITERSand check for safety violations:

||READERS_WRITERS =( reader[1..Nread]:READER || writer[1..Nwrite]:WRITER || {reader[1..Nread],

writer[1..Nwrite]}::READWRITE

No deadlocks/errors

Page 230: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 224.

Fairness and Optimism

s

Read,te}. er[i].acquireWriteer[i].acquireRead2

releaseRead,eleaseRead}

© O. Nierstrasz — U. Berne

Progress propertieWe similarly specify liveness properties:||RW_PROGRESS = READERS_WRITERS

>>{reader[1..Nread].releasewriter[1..Nread].releaseWri

progress WRITE[i:1..Nwrite] = writprogress READ[i:1..Nwrite] = readProgress violation: WRITE.1 WRITE.Trace to terminal set of states:reader.1.acquireRead tau

Actions in terminal set:{reader.1.acquireRead, reader.1.reader.2.acquireRead, reader.2.r

Page 231: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 225.

Fairness and Optimism

© O. Nierstrasz — U. Berne

Starvation

Page 232: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 226.

Fairness and Optimism

olicies

Readers even if a

rs decreases

iting for a Writer to ?dom? Alternate? ers finish.

thout having to give

© O. Nierstrasz — U. Berne

Readers and Writers PIndividual policies must address:

❑ Can new Readers join already activeWriter is waiting?☞ if yes, Writers may starve☞ if not, the throughput of Reade

❑ If both Readers and Writers are wafinish, which should you let in first☞ Readers? A Writer? FCFS? Ran☞ Similar choices exist after Read

❑ Can Readers upgrade to Writers wiup access?

Page 233: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 227.

Fairness and Optimism

waiting Writers.

threads

ay to implement

© O. Nierstrasz — U. Berne

Policies ...A typical set of choices:

❑ Block incoming Readers if there are

❑ “Randomly” choose among incoming (i.e., let the scheduler choose).

❑ No upgrade mechanisms.

Before/after methods are the simplest wReaders and Writers policies.

Page 234: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 228.

Fairness and Optimism

xample

; // zero or more; // zero or one;

0;

// define in; // subclass

0

© O. Nierstrasz — U. Berne

Readers and Writers eImplement state tracking variables

public abstract class RWVT {protected int protected int activeWriters_ = 0protected int protected int waitingWriters_ =

protected abstract void read_();protected abstract void write_()

...

activeReaders_ = 0

waitingReaders_ =

Page 235: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 229.

Fairness and Optimism

xampleer methods

ronizedaccess service access

© O. Nierstrasz — U. Berne

Readers and Writers ePublic methods call protected before/aft...public void read() { // unsynch

// obtain // perform// release

}public void write() {beforeWrite();write_();afterWrite();

}...

beforeRead();read_();afterRead();

Page 236: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 230.

Fairness and Optimism

xampletain state variables

reRead() {le to subclasses

x) {}

rRead() {

ders_;

© O. Nierstrasz — U. Berne

Readers and Writers eSynchronized before/after methods main...protected void befo

; // availabwhile (!allowReader())try { ; }catch (InterruptedException e

}protected void afte

}...

synchronized++waitingReaders_

wait()

--waitingReaders_; ++activeRea

synchronized--activeReaders_; notifyAll();

Page 237: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 231.

Fairness and Optimism

xample variables ...

// default policy

ethods for Writers?

© O. Nierstrasz — U. Berne

Readers and Writers eDifferent policies can use the same state...protected boolean allowReader() {return

}...

✎ Can you define suitable before/after m

waitingWriters_ == 0 && activeWriters_ == 0;

Page 238: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 232.

Fairness and Optimism

thodsions, but rollback ack, they either ions.

r retries.ethods .

fore failure checkss of each performed other objects, they ages”act, delaying s ruled out.

© O. Nierstrasz — U. Berne

Pattern: Optimistic MeIntent: Optimistic methods attempt actstate in case of interference. After rollbthrow failure exceptions or retry the act

Applicability❑ Clients can tolerate either failure o

☞ If not, consider using guarded m❑ You can avoid or cope with livelock.❑ You can undo actions performed be

☞ Rollback/Recovery: undo effectaction. If messages are sent to must be undone with “anti-mess

☞ Provisional action: “pretend” to commitment until interference i

Page 239: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 233.

Fairness and Optimism

sign stepsso that it can be

olding values of all

ake it mutable (allow dditionally include a tifier) field or even

version number, in o take as arguments s of these variables.t state. ...

© O. Nierstrasz — U. Berne

Optimistic Methods — deCollect and encapsulate all mutable state tracked as a unit:

❑ Define an immutable helper class hinstance variables.

❑ Define a representation class, but minstance variables to change), and aversion number (or transaction idena sufficiently precise time stamp.

❑ Embed all instance variables, plus athe host class, but define commit tall assumed values and all new value

❑ Maintain a serialized copy of objec❑ Various combinations of the above

Page 240: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 234.

Fairness and Optimism

.etects version od of the form: code sketchimmutable values

t)

;e_ == assumed)

© O. Nierstrasz — U. Berne

Detect failure ..Provide an operation that simultaneously dconflicts and performs updates via a methclass Optimistic { // private State currentState_; //

booleancommit(State assumed, State nex

{boolean success =

return success;}

}

synchronized

(currentStatif (success) currentState_ = next;

Page 241: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 235.

Fairness and Optimism

. method as follows:

optimistically

utNotChangingIt();

© O. Nierstrasz — U. Berne

Detect failure ..Structure the main actions of each public

State ;State next = ... // compute

elseotherActionsDependingOnNewStateB

assumed = currentState()

if (!commit(assumed, next))rollback();

Page 242: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 236.

Fairness and Optimism

..ith commit failures:

ilure that tells a

succeeds.

es, or until a timeout n.

d methods which

© O. Nierstrasz — U. Berne

Handle conflicts .Choose and implement a policy for dealing w

❑ Throw an exception upon commit faclient that it may retry.

❑ Internally retry the action until it

❑ Retry some bounded number of timoccurs, finally throwing an exceptio

❑ Pessimistically synchronize selecteshould not fail.

Page 243: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 237.

Fairness and Optimism

..s

erproductive!

l threads have scheduler at least iting tasks (which it

© O. Nierstrasz — U. Berne

Ensure progress .Ensure progress in case of internal retrie

❑ Immediately retrying may be count

❑ Yielding may only be effective if alreasonable priorities and the Java approximates fair choice among wais not guaranteed to do)!

❑ Limit retries to avoid livelock

Page 244: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 238.

Fairness and Optimism

Counter

(MIN);

dc);

© O. Nierstrasz — U. Berne

An Optimistic Bounded public class BoundedCounterVOPT

implements BoundedCounter{protected Long count_ = new Longprotected booleancommit(Long oldc, Long newc)

{boolean success = (count_ == ol

}...

synchronized

if (success) count_ = newc;return success;

Page 245: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 239.

Fairness and Optimism

Counter

nt_.longValue(); }

d busy-wait!ongValue();Long(v+1)))

);

© O. Nierstrasz — U. Berne

An Optimistic Bounded ...public long value() { return coupublic void inc() { for (;;) { // thinly disguiseLong c = count_; long v = c.l

// is there another thread?!}

}...

if (v < MAX && commit(c, new break;

Thread.currentThread().yield(

Page 246: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 240.

Fairness and Optimism

ow!ize threads?s of fairness?s?rs pose?

stic methods?w do you detect

© O. Nierstrasz — U. Berne

What you should kn✎ What criteria might you use to priorit✎ What are different possible definition✎ What are readers and writers problem✎ What difficulties do readers and write✎ When should you consider using optimi✎ How can an optimistic method fail? Ho

failure?

Page 247: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 241.

Fairness and Optimism

estions?? How does it work?pgrading readers to

ava) scheduler al section?s of encapsulating ethods?

© O. Nierstrasz — U. Berne

Can you answer these qu✎ When does it make sense to split locks✎ When should you provide a policy for u

writers?✎ What are the dangers in letting the (J

choose which writer may enter a critic✎ What are advantages and disadvantage

synchronization conditions as helper m✎ How can optimistic methods livelock?

Page 248: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 242.

Lab session II

II

course web page:

scar/cp/

© O. Nierstrasz — U. Berne

11. Lab session

The lab exercises will be available on the

matsu-www.is.titech.ac.jp/~o

Page 249: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 243.

Architectural Styles for Concurrency

yles for

ure

© O. Nierstrasz — U. Berne

12. Architectural StConcurrency

Overview❑ What is Software Architecture?❑ Three-layered application architect❑ Flow architectures

☞ Active Prime Sieve❑ Blackboard architectures

☞ Fibonacci with Linda

Page 250: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 244.

Architectural Styles for Concurrency

rchitecture: line, Prentice-Hall,

ted Software rns, John Wiley,

Java — Design eries, Addison-

o Write Parallel s, Cambridge, 1990.

© O. Nierstrasz — U. Berne

Sources❑ M. Shaw and D. Garlan, Software A

Perspectives on an Emerging Discip1996.

❑ F. Buschmann, et al., Pattern-OrienArchitecture — A System of Patte1996.

❑ D. Lea, Concurrent Programming in principles and Patterns, The Java SWesley, 1996.

❑ N. Carriero and D. Gelernter, How tPrograms: a First Course, MIT Pres

Page 251: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 245.

Architectural Styles for Concurrency

urestem in terms of ctions amongst

ily of systems in nization.

ecture, pp. 3, 19

© O. Nierstrasz — U. Berne

Software ArchitectA Software Architecture defines a sycomputational components and interathose components.

An Architectural Style defines a famterms of a pattern of structural orga

— cf. Shaw & Garlan, Software Archit

Page 252: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 246.

Architectural Styles for Concurrency

lekinds of properties:

and “sinks”nstrain compositionsnate in a linear

m its input stream treamrmed”, no deadlock can ss in tandem

© O. Nierstrasz — U. Berne

Architectural styArchitectural styles typically entail four

❑ A vocabulary of design elements☞ e.g., “pipes”, “filters”, “sources”,

❑ A set of configuration rules that co☞ e.g., pipes and filters must alter

sequence❑ A semantic interpretation

☞ e.g., each filter reads bytes froand writes bytes to its output s

❑ A set of analyses that can be perfo☞ e.g., if filters are “well-behaved

occur, and all filters can progre

Page 253: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 247.

Architectural Styles for Concurrency

lesred Variablesesses communicate ectly.

licit synchronization hanisms are needed.

P2

© O. Nierstrasz — U. Berne

Communication StyShaProcindirExpmec

Message-PassingCommunication and synchronization are combined.

P1 P2 P3

P1

P3

Page 254: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 248.

Architectural Styles for Concurrency

ssinges can be simulated

ciating message

s

© O. Nierstrasz — U. Berne

Simulated Message-PaMost concurrency and communication stylby one another:

Message-passing can be modelled by assoqueues to each process.

Unsynchronized object

Synchronized objects

Page 255: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 249.

Architectural Styles for Concurrency

rchitectures

onitor problems by layer.

© O. Nierstrasz — U. Berne

Three-layered Application A

This kind of architecture avoids nested mrestricting concurrency control to a single

Interaction with external worldGenerating threads

Concurrency controlLocking, waiting, failing

Basic mechanisms

Page 256: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 250.

Architectural Styles for Concurrency

Designsuse:

nformationle.g., message history)

nt layers may

urrent policy

© O. Nierstrasz — U. Berne

Problems with Layered Hard to extend beyond three layers beca

❑ Control may depend on unavailable i☞ Because it is not safely accessib☞ Because it is not represented (e

❑ Synchronization policies of differeconflict ☞ E.g., nested monitor lockouts

❑ Ground actions may need to know c☞ E.g., blocking vs. failing

Page 257: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 251.

Architectural Styles for Concurrency

sided by arranging e direction from

e connected in a

by sensors, s.

ts flow through

© O. Nierstrasz — U. Berne

Flow ArchitectureMany synchronization problems can be avothings so that information only flows in onsources to filters to sinks.

Unix “pipes and filters”: Processes arlinear sequence.

Control systems: events are picked up processed, and generate new event

Workflow systems: Electronic documenworkflow procedures.

Page 258: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 252.

Architectural Styles for Concurrency

ect producer and lters):

to output stream word on one line

f each worderical orderult

© O. Nierstrasz — U. Berne

Unix PipesUnix pipes are bounded buffers that connconsumer processes (sources, sinks and fi

cat file # send file contents | tr -c ’a-zA-Z’ ’\012’ # put each| sort # sort the words| uniq -c # count occurrences o| sort -rn # sort in reverse num| more # and display the res

Page 259: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 253.

Architectural Styles for Concurrency

t and write to

“broken pipes”!

ed by the O/S.

e I/O system

© O. Nierstrasz — U. Berne

Unix PipesProcesses should read from standard inpustandard output streams:

❑ Misbehaving processes give rise to

Process creation and scheduling are handl

Synchronization is handled implicitly by th(through buffering).

Page 260: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 254.

Architectural Styles for Concurrency

r or both:

ple successorsltiple consumersgst consumers

tiple predecessors single consumert to produce a single

essors and

© O. Nierstrasz — U. Berne

Flow StagesEvery flow stage is a producer or consume

❑ Splitters (Multiplexers) have multi☞ Multicasters clone results to mu☞ Routers distribute results amon

❑ Mergers (Demultiplexers) have mul☞ Collectors interleave inputs to a☞ Combiners process multiple inpu

result

❑ Conduits have both multiple predecconsumers

Page 261: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 255.

Architectural Styles for Concurrency

ixture:sults from Producersults to Consumers

t push-based stagesffers) connect pull-

) push-based stages

ke Consumer

© O. Nierstrasz — U. Berne

Flow PoliciesFlow can be pull-based, push-based, or a m

❑ Pull-based flow: Consumers take re❑ Push-based flow: Producers put res❑ Buffers:

☞ Put-only buffers (relays) connec☞ Take-only buffers (pre-fetch bu

based stages☞ Put-Take buffers connect (adapt

to pull-based stages

Producer bufferput

ta

Page 262: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 256.

Architectural Styles for Concurrency

faster than ailable memory

hreads can ckly than

ays full or speed of

ge than bounded

© O. Nierstrasz — U. Berne

Limiting FlowUnbounded buffers: If producers are

consumers, buffers may exhaust av

Unbounded threads: Having too many texhaust system resources more quiunbounded buffers

Bounded buffers: Tend to be either alwalways empty, depending on relativeproducers and consumers

Bounded thread pools: Harder to manabuffers

Page 263: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 257.

Architectural Styles for Concurrency

ime Sieve, pass on candidates,

get()

ctivePrime(5)

ActivePrime(7)

© O. Nierstrasz — U. Berne

Example: a Pull-based PrPrimes are agents that reject non-primesor instantiate new prime agents:

4

5

3

6

5

7 7

8

get()

new

new

new

get()

get()

ActivePrime(2)TestForPrime

ActivePrime(3)

A

Page 264: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 258.

Architectural Styles for Concurrency

ferso feed values to the

2, gets values from ime instances

5

© O. Nierstrasz — U. Berne

Using Put-Take BufEach ActivePrime uses a one-slot buffer tnext ActivePrime.

The first ActivePrime holds the seed valuea TestForPrime, and creates new ActivePrwhenever it detects a prime value.

72... 10 9 8 3

Page 265: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 259.

Architectural Styles for Concurrency

tial configuration

rgs[]) {

n) {

ForPrime(n));

© O. Nierstrasz — U. Berne

The PrimeSieveThe main PrimeSieve class creates the inipublic class PrimeSieve {public static void main(String agenPrimes(1000);

}public static void genPrimes(inttry {ActivePrime firstPrime =

} catch (Exception e) { }}

}

new ActivePrime(2, new Test

Page 266: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 260.

Architectural Styles for Concurrency

urcesIntSource:; }ource {

ue = max;

t synched!urn nextValue++; }

© O. Nierstrasz — U. Berne

Pull-based integer soActive primes get values to test from an interface IntSource { int getInt()class TestForPrime implements IntSprivate int nextValue;private int maxValue;public TestForPrime(int max) {this.nextValue = 3; this.maxVal

}public int getInt() { // noif (nextValue < maxValue) { retelse { return 0; }

}}

Page 267: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 261.

Architectural Styles for Concurrency

assource

{me; // shareds prime squares to testpass values on

ource

© O. Nierstrasz — U. Berne

The ActivePrime ClActivePrimes themselves implement IntS

class ActivePrime extends Thread

private IntSource lastPriprivate int value; // thiprivate int square; // itsprivate IntSource intSrc; // int

// to ...

implements IntSstatic

private Slot slot;

Page 268: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 262.

Architectural Styles for Concurrency

ass

tSource intSrc)

rivatechronized (safe!)e active

ed out of order!

© O. Nierstrasz — U. Berne

The ActivePrime Cl...public ActivePrime(int value, Inthrows ActivePrimeFailure

{this.value = value;...

// NB: p// unsyn// becom

}...

It is impossible for primes to be discover

slot = new Slot();lastPrime = this;this.start();

Page 269: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 263.

Architectural Styles for Concurrency

s ...

// may block

// may blockintValue();

Slot class.

© O. Nierstrasz — U. Berne

The ActivePrime Clas...public int value() {return this.value;

} void putInt(int val) {

(new Integer(val));}public int getInt() {return ((Integer) ).

}...

The only synchronization is hidden in the

privateslot.put()

slot.get()

Page 270: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 264.

Architectural Styles for Concurrency

s ...

; // may block// stop

{ // got a prime

;ak; } // exit loopvalue) > 0) {

// may block

// may block

// stop next

)

, lastPrime)

© O. Nierstrasz — U. Berne

The ActivePrime Claspublic void run() {int testValue = while (testValue != 0) {if (this.square > testValue) try {

} catch (Exception e) { bre} else if ((testValue % this.

;}testValue = ;

}putInt(0);

}

intSrc.getInt(

new ActivePrime(testValue

this.putInt(testValue)

intSrc.getInt()

Page 271: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 265.

Architectural Styles for Concurrency

uresization in a xchange messages.

, but post messages either by reading r by posing a query

© O. Nierstrasz — U. Berne

Blackboard ArchitectBlackboard architectures put all synchron“coordination medium” where agents can e

Agents do not exchange messages directlyto the blackboard, and retrieve messagesfrom a specific location (i.e., a channel), o(i.e., a pattern to match).

?

Page 272: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 266.

Architectural Styles for Concurrency

tural style in which whole.

..

© O. Nierstrasz — U. Berne

Result ParallelismResult parallelism is a blackboard architecworkers produce parts of a more complex

Workers may be arranged hierarchically .

Page 273: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 267.

Architectural Styles for Concurrency

which workers ard, and may

verything is done.itrary tasks.

© O. Nierstrasz — U. Berne

Agenda ParallelismAgenda parallelism is a blackboard style inretrieve tasks to perform from a blackbogenerate new tasks to perform.

Workers repeatedly retrieve tasks until eWorkers are typically able to perform arb

Page 274: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 268.

Architectural Styles for Concurrency

smach worker is

ge-passing, and are th each specialist o consume.

© O. Nierstrasz — U. Berne

Specialist ParalleliSpecialist parallelism is a style in which especialized to perform a particular task.

Specialist designs are equivalent to messaoften organized as flow architectures, wiproducing results for the next specialist t

Page 275: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 269.

Architectural Styles for Concurrency

iated primitives for an be added to an

which can contain:

ales (numbers,

re evaluated and

© O. Nierstrasz — U. Berne

LindaLinda is a coordination medium, with assoccoordinating concurrent processes, that cexisting programming language.

The coordination medium is a tuple-space,

❑ data tuples — tuples of primitives vstrings ...)

❑ active tuples — expressions which aeventually turn into data tuples

Page 276: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 270.

Architectural Styles for Concurrency

(non-blocking)”, 35000)

ching S (blocking), ?salary)

(blocking)

blocking)

ace

© O. Nierstrasz — U. Berne

Linda primitivesLinda’s coordination primitives are:out(T) output a tuple T to the medium

e.g., out(“employee”, “pinguin(S) destructively input a tuple mat

e.g., in(“employee”, “pingu”rd(S) non-destructively input a tupleinp(S)rdp(S)

try to input a tuplereport success or failure (non-

eval(E) evaluate E in a new processleave the result in the tuple sp

Page 277: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 271.

Architectural Styles for Concurrency

cii numbers with Linda:

non-blocking

non-blocking

; // asynchblocks

fibn) == True

2))

© O. Nierstrasz — U. Berne

Example: FibonacA (convoluted) way of computing Fibonaccint fib(int n) {if ( ) // return fibn;

if (n<2) {; //

return 1;}

; // return(fibn);

} // Post-condition: rdp(“fib”,n,?

rdp("fib", n, ?fibn)

out(“fib”, n, 1)

eval("fib", n, fib(n-1) + fib(n-rd("fib", n, ?fibn)

Page 278: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 272.

Architectural Styles for Concurrency

ci

fib(4)+fib(3))

© O. Nierstrasz — U. Berne

Evaluating Fibonac

eval(“fib”,5,

fib(5) rdp fails, so start eval

Page 279: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 273.

Architectural Styles for Concurrency

ci

fib(4)+fib(3))

ib(3)+fib(2))

© O. Nierstrasz — U. Berne

Evaluating Fibonac

rd(“fib”,5,?fn)

eval(“fib”,5,

fib(5)

eval(“fib”,4,f

fib(4)+fib(3)

blocks for result

Page 280: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 274.

Architectural Styles for Concurrency

ci

fib(4)+fib(3))

ib(3)+fib(2))

fib(2)+fib(1))

fib(1)+fib(0))

ase level succeeds

© O. Nierstrasz — U. Berne

Evaluating Fibonac

rd

rd

rd(“fib”,5,?fn)

rd

eval(“fib”,5,

fib(5)

fib(4)+fib(3)

eval(“fib”,4,f

eval(“fib”,3,

fib(3)+fib(2)

eval(“fib”,2,fib(2)+fib(1)

(“fib”,1,1)fib(1)+fib(0) b

Page 281: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 275.

Architectural Styles for Concurrency

ci

fib(4)+fib(3))

ib(3)+fib(2))

fib(2)+fib(1))

”,2,2)

(“fib”,0,1)

assive tuple

© O. Nierstrasz — U. Berne

Evaluating Fibonac

rd

rd

rd(“fib”,5,?fn)

rd

eval(“fib”,5,

fib(5)

fib(4)+fib(3)

eval(“fib”,4,f

eval(“fib”,3,

fib(3)+fib(2)

(“fibfib(2)+fib(1)

(“fib”,1,1)

eval yields p

Page 282: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 276.

Architectural Styles for Concurrency

ci

fib(4)+fib(3))

ib(3)+fib(2))

fib(2)+fib(1))

”,2,2)

(“fib”,0,1)

© O. Nierstrasz — U. Berne

Evaluating Fibonac

rd

rd(“fib”,5,?fn)

rd

eval(“fib”,5,

fib(5)

fib(4)+fib(3)

eval(“fib”,4,f

eval(“fib”,3,

fib(3)+fib(2)

(“fibfib(2)+fib(1)

(“fib”,1,1)cached values are reused

Page 283: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 277.

Architectural Styles for Concurrency

ci

”,2,2)

(“fib”,0,1)

,4,5)

”,3,3)

”,5,8)

© O. Nierstrasz — U. Berne

Evaluating Fibonacfib(5)

(“fib

(“fib”,1,1)

(“fib”

(“fib

(“fib

Page 284: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 278.

Architectural Styles for Concurrency

ow!

s of Layered

e the options and

hat are the options

agenda parallelism?f concurrent agents?

© O. Nierstrasz — U. Berne

What you should kn✎ What is a Software Architecture?✎ What are advantages and disadvantage

Architectures?✎ What is a Flow Architecture? What ar

tradeoffs?✎ What are Blackboard Architectures? W

and tradeoffs?✎ How does result parallelism differ from✎ How does Linda support coordination o

Page 285: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 279.

Architectural Styles for Concurrency

estions? agents in Java?rchitectures?

n’t yet discussed?e Sieve is correct? ill join the chain in

hen we have multiple

hreads on a

urrent Fibonacci

© O. Nierstrasz — U. Berne

Can you answer these qu✎ How would you model message-passing✎ How would you classify Client/Server a✎ Are there other useful styles we have✎ How can we prove that the Active Prim

Are you sure that new Active Primes wthe correct order?

✎ Which Blackboard styles are better wprocessors?

✎ Which are better when we just have tmonoprocessor?

✎ What will happen if you start two conccomputations?

Page 286: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 280.

Petri Nets

ts

chemes heory and the l, 1983.

© O. Nierstrasz — U. Berne

13. Petri Nets

Overview❑ Definition:

☞ places, transitions, inputs, outpu☞ firing enabled transitions

❑ Modelling:☞ concurrency and synchronization

❑ Properties of nets:☞ liveness, boundedness

❑ Implementing Petri net models:☞ centralized and decentralized s

Reference: J. L. Peterson, Petri Nets TModelling of Systems, Prentice Hal

Page 287: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 281.

Petri Nets

tion

o bags of places)

y

a

© O. Nierstrasz — U. Berne

Petri nets: a definiA Petri net C = ⟨P,T,I,O⟩ consists of:

1. A finite set P of places2. A finite set T of transitions3. An input function I: T → N P (maps t4. An output function O: T → N P

A marking of C is a mapping µ: P → NExample:

P = { x, y }T = { a, b }I(a) = { x }, I(b) = { x, x }O(a) = { x, y },O(b) = { y }µ = { x, x }

x

b

Page 288: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 282.

Petri Nets

µ ≥ I(t): µ′ = µ - I(t) + O(t)

y

a

b

y

a

b

b

a

© O. Nierstrasz — U. Berne

Firing transitionsTo fire a transition t:

1. There must be enough input tokens: 2. Consume inputs and generate output

x

y

a

b

x

y

a

b

x

x

y

a

b

x

a

b

x

y

a

b

b

a

Page 289: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 283.

Petri Nets

nets

© O. Nierstrasz — U. Berne

Modelling with Petri

Petri nets are good for modelling:❑ concurrency❑ synchronization

Tokens can represent:❑ resource availability❑ jobs to perform❑ flow of control❑ synchronization conditions ...

Page 290: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 284.

Petri Nets

iring of transitions

© O. Nierstrasz — U. Berne

ConcurrencyIndependent inputs permit “concurrent” f

Page 291: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 285.

Petri Nets

lict

© O. Nierstrasz — U. Berne

ConflictOverlapping inputs put transitions in conf

Only one of a or b may fire

a

b

Page 292: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 286.

Petri Nets

e

© O. Nierstrasz — U. Berne

Mutual ExclusionThe two subnets are forced to synchroniz

Page 293: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 287.

Petri Nets

© O. Nierstrasz — U. Berne

Fork and Join

Page 294: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 288.

Petri Nets

mersconsumer

© O. Nierstrasz — U. Berne

Producers and Consuproducer

Page 295: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 289.

Petri Nets

© O. Nierstrasz — U. Berne

Bounded Buffers

occupied slots

free slots

Page 296: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 290.

Petri Nets

edness

C is the set of all arking µ.

if places always hold

es never hold more

number of tokens is

© O. Nierstrasz — U. Berne

Reachability and BoundReachability:

❑ The reachability set R(C,µ) of a netmarkings µ′ reachable from initial m

Boundedness:❑ A net C with initial marking µ is safe

at most 1 token.❑ A marked net is (k-)bounded if plac

than k tokens.❑ A marked net is conservative if the

constant.

Page 297: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 291.

Petri Nets

ock

never fire.eadlock.

c

b

y z

d? Are they live?

© O. Nierstrasz — U. Berne

Liveness and DeadlLiveness:

❑ A transition is deadlocked if it can ❑ A transition is live if it can never d

This net is both safe and conservative.Transition a is deadlocked.Transitions b and c are live.The reachability set is {{y}, {z}}.

a

x

Are the examples we have seen bounde

Page 298: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 292.

Petri Nets

rvative nets

b

c

d

© O. Nierstrasz — U. Berne

Related ModelsFinite State Processes

❑ Equivalent to regular expressions❑ Can be modelled by one-token conse

The FSA for: a(b|c)*da

Page 299: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 293.

Petri Nets

s

odelled by FSPs?

{u, w}

b{u, x}

ac

{v, x}

© O. Nierstrasz — U. Berne

Finite State NetSome Petri nets can be modelled by FSPs

✎ Precisely which nets can (cannot) be m

a

c

vu

xw b

{v, w}a

b

Page 300: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 294.

Petri Nets

slete

b

cd

© O. Nierstrasz — U. Berne

Zero-testing NetPetri nets are not computationally comp

❑ Cannot model “zero testing”❑ Cannot model priorities

A zero-testing net:An equal number ofa and b transitions may fireas a sequence during anysequence of matchingc and d transitions.(#a ≥ #b, #c ≥ #d)

a

Page 301: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 295.

Petri Nets

ts

red” to rces

itionally depend

ted with each

© O. Nierstrasz — U. Berne

Other VariantsThere exist countless variants of Petri ne

Coloured Petri nets: Tokens are “colourepresent different kinds of resou

Augmented Petri nets: Transitions addon external conditions

Timed Petri nets: A duration is associatransition

Page 302: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 296.

Petri Nets

nets

© O. Nierstrasz — U. Berne

Applications of Petri

Modelling information systems:❑ Workflow❑ Hypertext (possible transitions)❑ Dynamic aspects of OODB design

Page 303: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 297.

Petri Nets

netsither centralized or

current state of the

e shared resources, okens.

© O. Nierstrasz — U. Berne

Implementing Petri We can implement Petri net structures in edecentralized fashion:

Centralized:❑ A single “net manager” monitors the

net, and fires enabled transitions.

Decentralized:❑ Transitions are processes, places ar

and transitions compete to obtain t

Page 304: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 298.

Petri Nets

esanager selects and

ired in parallel.

e lead to?

deadlocked

marking

© O. Nierstrasz — U. Berne

Centralized schemIn one possible centralized scheme, the Mfires enabled transitions.

Concurrently enabled transitions can be f

✎ What liveness problems can this schem

Identify enabled

Select and firefound some got new

Net Manager

transitions

transitions

Page 305: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 299.

Petri Nets

esrocesses and tokens

-per-message ed more than once if

b

y

get()

© O. Nierstrasz — U. Berne

Decentralized schemIn decentralized schemes transitions are pare resources held by places:

Transitions can be implemented as threadgateways so the same transition can be firenough tokens are available.

x y

a ba

x

Page 306: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 300.

Petri Nets

heir input tokens as dlock even though

t processes, and x eadlock even though waits for y.

© O. Nierstrasz — U. Berne

TransactionsTransitions attempting to fire must grab tan atomic transaction, or the net may deathere are enabled transitions!

If a and b are implemented by independenand y by shared resources, this net can db is enabled if a (incorrectly) grabs x and

a

b

x y

Page 307: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 301.

Petri Nets

tionthe entire net as a

g transitions. distributed setting?

© O. Nierstrasz — U. Berne

Coordinated interacA simple solution is to treat the state of single, shared resource:

After a transition fires, it notifies waitin✎ How could you refine this scheme for a

a

b

x y

a b

get()

Page 308: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 302.

Petri Nets

ow!

ynchronization?? How can you

led by finite state

ri net deadlock even

y is it a good idea to sage gateways”?

© O. Nierstrasz — U. Berne

What you should kn✎ How are Petri nets formally specified?✎ How can nets model concurrency and s✎ What is the “reachability set” of a net

compute this set?✎ What kinds of Petri nets can be model

processes?✎ How can a (bad) implementation of a Pet

though there are enabled transitions?✎ If you implement a Petri net model, wh

realize transitions as “thread-per-mes

Page 309: Winter 2000/2001 Tokyo Institute of Technologyscg.unibe.ch/.../lectures/CP-ConcurrentProgramming/... · 2. 10-16 Concurrency and Java 3. 10-23 Safety and Synchronization 4. 11 -06

CP — Titech Winter 2001 303.

Petri Nets

estions?uaranteeing that a

ophers problem as a conservative? Live?

ake them Turing-

tri net to make it

© O. Nierstrasz — U. Berne

Can you answer these qu✎ What are some simple conditions for g

net is bounded?✎ How would you model the Dining Philos

Petri net? Is such a net bounded? Is it✎ What could you add to Petri nets to m

complete?✎ What constraints could you put on a Pe

fair?