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
Top Related