{[ promptMessage ]}

Bookmark it

{[ promptMessage ]}

15-multithreading2

15-multithreading2 - Overview CMSC 330 Organization of...

Info iconThis preview shows pages 1–3. Sign up to view the full content.

View Full Document Right Arrow Icon
1 CMSC 330: Organization of Programming Languages Java 1.5, Ruby, and MapReduce CMSC 330 2 Overview Java 1.5 ReentrantLock class Condition interface - await( ), signalAll( ) Ruby multithreading Concurrent programming Parallel applications & languages MapReduce CMSC 330 3 Lock Interface (Java 1.5) Explicit Lock objects Same as implicit lock used by synchronized keyword Only one thread can hold a lock at once lock( ) causes thread to block (become suspended) until lock can be acquired unlock( ) allows lock to be acquired by different thread interface Lock { void lock(); void unlock(); ... /* Some more stuff, also */ } class ReentrantLock implements Lock { ... } CMSC 330 4 Synchronization Example (Java 1.5) public class Example extends Thread { private static int cnt = 0; static Lock lock = new ReentrantLock(); public void run() { lock.lock(); int y = cnt; cnt = y + 1; lock.unlock(); } } } Lock , for protecting the shared state Acquires the lock; only succeeds if not held by another thread, otherwise blocks Releases the lock CMSC 330 5 ReentrantLock Class (Java 1.5) Reentrant lock Can be reacquired by same thread by invoking lock( ) ° Up to 2147483648 times To release lock, must invoke unlock( ) ° The same number of times lock( ) was invoked Reentrancy is useful Each method can acquire/release locks as necessary ° No need to worry about whether callers already have locks Discourages complicated coding practices ° To determine whether lock has already been acquired class ReentrantLock implements Lock { ... } CMSC 330 6 Reentrant Lock Example Example returnAndInc( ) can acquire lock and invoke inc( ) inc( ) can acquire lock without having to worry about whether thread already has lock static int count = 0; static Lock l = new ReentrantLock(); void inc() { l.lock(); count ++; l.unlock(); } void returnAndInc() { int temp; l.lock(); temp = count ; inc(); l.unlock(); }
Background image of page 1

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full Document Right Arrow Icon
2 CMSC 330 7 Condition Interface (Java 1.5) Explicit condition variable objects Condition variable C is created from a Lock object L by calling L .newCondition( ) Condition variable C is then associated with L Multiple condition objects per lock Allows different wait sets to be created for lock Can wake up different threads depending on condition interface Lock { Condition newCondition(); ... } interface Condition { void await(); void signalAll(); ... } CMSC 330 8 Condition – await() and signallAll() Calling await( ) w/ lock held Releases the lock ° But not any other locks held by this thread Adds this thread to wait set for condition Blocks the thread Calling signallAll( ) w/ lock held Resumes all threads in condition’s wait set Threads must reacquire lock ° Before continuing (returning from await) ° Enforced automatically; you don' t have to do it L C C C T T T ... ...
Background image of page 2
Image of page 3
This is the end of the preview. Sign up to access the rest of the document.

{[ snackBarMessage ]}