UNIVERSITY OF NIVERSITY OF MASSACHUSETTS ASSACHUSETTS AMHERST • MHERST • Department of Computer Science Department of Computer Science Computer Systems Principles Synchronization Emery Berger and Mark Corner University of Massachusetts Amherst
Jan 08, 2016
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science
Computer Systems PrinciplesSynchronization
Emery Berger and Mark CornerUniversity of Massachusetts
Amherst
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 2
Synchronization Threads must ensure consistency
– Else: race condition(non-deterministic result)
– Requires synchronization operations How to write concurrent code How to implement synch. operations
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 3
Synchronization – Motivation “The too much milk problem”
Model of need to synchronize activities
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 4
Synchronization Terminology Mutual exclusion (“mutex”)
– prevents multiple threads from entering Critical section
– code only one thread can execute at a time Lock
– mechanism for mutual exclusion– Lock entering critical section, accessing shared data– Unlock when complete– Wait if locked
Invariant– Something that must be true
• when not holding lock
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 5
Solving Too Much Milk Correctness properties
– Only one person buys milk• Safety: “nothing bad happens”
– Someone buys milk if you need to• Progress: “something good eventually happens”
First: use atomic loads & stores as building blocks– “Leave a note” (lock)– “Remove a note” (unlock)– “Don’t buy milk if there’s a note” (wait)
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 6
thread A
if (no milk && no note)
leave note
buy milk
remove note
thread B
if (no milk && no note)
leave note
buy milk
remove note
Does this work?too much milk
Too Much Milk: Solution 1
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 7
thread A
leave note A
if (no note B)
if (no milk)
buy milk
remove note A
thread B
leave note B
if (no note A)
if (no milk)
buy milk
remove note B
Idea: use labeled notes
oops – no milk
Too Much Milk: Solution 2
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 8
thread A
leave note Awhile (note B) do nothingif (no milk) buy milkremove note A
thread B
leave note B
if (no note A)
if (no milk)
buy milk
remove note B
Idea: wait for the right note
Quick Activity: does this work?
Too Much Milk: Solution 3
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 9
thread A
leave note A
while (note B)
do nothing
if (no milk)
buy milk
remove note A
thread B
leave note B
if (no note A)
if (no milk)
buy milk
remove note B
Possibility 1: A first, then B
OK
Too Much Milk: Solution 3
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 10
thread A
leave note A
while (note B)
do nothing
if (no milk)
buy milk
remove note A
thread B
leave note B
if (no note A)
if (no milk)
buy milk
remove note B
Possibility 2: B first, then A
OK
Too Much Milk: Solution 3
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 11
thread A
leave note A
while (note B)
do nothing
if (no milk)
buy milk
remove note A
thread B
leave note B
if (no note A)
if (no milk)
buy milk
remove note B
Possibility 3: Interleaved – A waits & buys
OK
Too Much Milk: Solution 3
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 12
thread A
leave note A
while (note B)
do nothing
if (no milk)
buy milk
remove note A
thread B
leave note B
if (no note A)
if (no milk)
buy milk
remove note B
Possibility 4: Interleaved – A waits, B buys
OK
Too Much Milk: Solution 3
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 13
Too Much Milk: Solution 3 Solution 3:
“Thread A waits for B, otherwise buys”
Correct – preserves desired properties– Safety: we only buy one milk– Progress: we always buy milk
But…
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 14
Problems with this Solution Complicated
– Difficult to convince ourselves that it works Asymmetrical
– Threads A & B are different– More threads=different code for each thread
Poor utilization– Busy waiting – consumes CPU, no useful work
Possibly non-portable– Relies on atomicity of loads & stores
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 15
Language Support Synchronization complicated Better way – provide language-level support
– Higher-level approach– Hide gory details in runtime system
Increasingly high-level approaches:– Locks, Atomic Operations– Semaphores – generalized locks– Monitors – tie shared data to synchronization
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 16
Locks Provide mutual exclusion to shared data
– two atomic routines• acquire – wait for lock, then take it• release – unlock, wake up waiters
Rules:– Acquire lock before accessing shared data– Release lock afterwards– Lock initially released
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science
Locks and Queuing Acquire:
– if unlocked,go in;otherwise wait in line
Release:– Unlock &
leave
17
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 18
Pthreads Syntax POSIX standard for C/C++ Mutual exclusion locks
– Ensures only one thread in critical section
pthread_mutex_init (&l);…
pthread_mutex_lock (&l);update data; /* critical section */pthread_mutex_unlock (&l);
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 19
thread A thread B
Too Much Milk: Locks
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 20
thread A
p_m_lock(&l)
if (no milk)
buy milk
p_m_unlock(&l)
thread B
p_m_lock(&l)
if (no milk)
buy milk
p_m_unlock(&l)
Too Much Milk: Locks Clean, symmetric How do we implement it?
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 21
Implementing Locks Requires hardware support (in general) Can build on atomic operations:
– Load/Store– Disable interrupts
• Uniprocessors only– Test & Set, Compare & Swap
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 22
Disabling Interrupts Prevent scheduler from switching threads
in middle of critical sections– Ignores quantum expiration (timer interrupt)– No handling I/O operations
• (Don’t make I/O calls in critical section!)
Why not implement as system call?
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 23
Class Lock { private int value; private Queue q;
Lock () { value = 0; q = empty; }
public void acquire () { disable interrupts; if (value == BUSY) { add this thread to q;
enable interrupts; sleep(); } else { value = BUSY; } enable interrupts; }
public void release () { disable interrupts; if (q not empty) { thread t = q.pop(); put t on ready queue; } value = FREE;
enable interrupts; }
Disabling Interrupts
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 24
Locks via Disabling Interrupts
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 25
Summary Communication between threads
– via shared variables Critical sections
– regions of code that access shared variables Must be protected by synchronization
– primitives that ensure mutual exclusion– Loads & stores: tricky, error-prone– Solution: high-level primitives (e.g., locks)
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 26
The End
UUNIVERSITY OF NIVERSITY OF MMASSACHUSETTS ASSACHUSETTS AAMHERST • MHERST • Department of Computer Science Department of Computer Science 27
Pthreads API