1 Chapter 4 50+ years of CS and SE devoted to issues of composability: how to create solutions to big problems by combining (composing) solutions to smaller.

Slides:



Advertisements
Similar presentations
Ken Birman 1. Refresher: Dekers Algorithm Assumes two threads, numbered 0 and 1 CSEnter(int i) { int J = i^1; inside[i] = true; turn = J; while(inside[J]
Advertisements

50.003: Elements of Software Construction Week 6 Thread Safety and Synchronization.
Ch 7 B.
CSCC69: Operating Systems
Composition CMSC 202. Code Reuse Effective software development relies on reusing existing code. Code reuse must be more than just copying code and changing.
1 CSCI 6900: Design, Implementation, and Verification of Concurrent Software Eileen Kraemer August 24 th, 2010 The University of Georgia.
CMSC 330: Organization of Programming Languages Threads Classic Concurrency Problems.
Concurrency 101 Shared state. Part 1: General Concepts 2.
/ PSWLAB Concurrent Bug Patterns and How to Test Them by Eitan Farchi, Yarden Nir, Shmuel Ur published in the proceedings of IPDPS’03 (PADTAD2003)
Designing a thread-safe class  Store all states in public static fields  Verifying thread safety is hard  Modifications to the program hard  Design.
Threading Part 4 CS221 – 4/27/09. The Final Date: 5/7 Time: 6pm Duration: 1hr 50mins Location: EPS 103 Bring: 1 sheet of paper, filled both sides with.
Threading Part 3 CS221 – 4/24/09. Teacher Survey Fill out the survey in next week’s lab You will be asked to assess: – The Course – The Teacher – The.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved Immutable Objects and Classes.
Threads Load new page Page is loading Browser still responds to user (can read pages in other tabs)
© Andy Wellings, 2004 Roadmap  Introduction  Concurrent Programming  Communication and Synchronization  Completing the Java Model  Overview of the.
Assignment – no class Wednesday All: watch the Google Techtalk “Getting C++ Threads Right” by Hans Boehm at the following link in place of Wednesday’s.
Principle 1 If more than one thread accesses a given state variable and one of them might write to it then All accesses to the variable must be correctly.
Synchronization in Java Fawzi Emad Chau-Wen Tseng Department of Computer Science University of Maryland, College Park.
Lecture 7 First mid-term: Feb 23 Assignment on Construction, Publishing and Visibility is posted (and we will discuss momentarily)
Feb. 23, 2004CS WPI1 CS 509 Design of Software Systems Lecture #5 Monday, Feb. 23, 2004.
1 Sharing Objects – Ch. 3 Visibility What is the source of the issue? Volatile Dekker’s algorithm Publication and Escape Thread Confinement Immutability.
29-Jun-15 Java Concurrency. Definitions Parallel processes—two or more Threads are running simultaneously, on different cores (processors), in the same.
K. Stirewalt CSE 335: Software Design Software Architecture and Larger System Design Issues Lecture 3: Synchronization Topics: –Concurrent access to shared.
02/19/2007CSCI 315 Operating Systems Design1 Process Synchronization Notice: The slides for this lecture have been largely based on those accompanying.
Week 9 Building blocks.
CS4231 Parallel and Distributed Algorithms AY 2006/2007 Semester 2 Lecture 2 (19/01/2006) Instructor: Haifeng YU.
U NIVERSITY OF M ASSACHUSETTS, A MHERST Department of Computer Science Emery Berger University of Massachusetts, Amherst Operating Systems CMPSCI 377 Lecture.
Java Programming: Advanced Topics
Cs205: engineering software university of virginia fall 2006 Data Abstraction David Evans
50.003: Elements of Software Construction Week 8 Composing Thread-safe Objects.
Threading and Concurrency Issues ● Creating Threads ● In Java ● Subclassing Thread ● Implementing Runnable ● Synchronization ● Immutable ● Synchronized.
Composition (Part 2) 1. Class Invariants  class invariant  some property of the state of the object that is established by a constructor and maintained.
SPL/2010 Safety 1. SPL/2010 system designing for concurrent execution environments ● system: collection of objects and their interactions ● system properties:
Low-Level Detailed Design SAD (Soft Arch Design) Mid-level Detailed Design Low-Level Detailed Design Design Finalization Design Document.
COMP 111 Threads and concurrency Sept 28, Tufts University Computer Science2 Who is this guy? I am not Prof. Couch Obvious? Sam Guyer New assistant.
Internet Software Development Controlling Threads Paul J Krause.
Synchronized and Monitors. synchronized is a Java keyword to denote a block of code which must be executed atomically (uninterrupted). It can be applied.
CSC321 Concurrent Programming: §5 Monitors 1 Section 5 Monitors.
(c) University of Washington15-1 CSC 143 Java List Implementation via Arrays Reading: 13.
Sharing Objects  Synchronization  Atomicity  Specifying critical sections  Memory visibility  One thread’s modification seen by the other  Visibility.
Java Thread and Memory Model
SPL/2010 Synchronization 1. SPL/2010 Overview ● synchronization mechanisms in modern RTEs ● concurrency issues ● places where synchronization is needed.
Threads Eivind J. Nordby University of Karlstad Inst. for Information Technology Dept. of Computer Science.
SPL/2010 Guarded Methods and Waiting 1. SPL/2010 Reminder! ● Concurrency problem: asynchronous modifications to object states lead to failure of thread.
Monitors and Blocking Synchronization Dalia Cohn Alperovich Based on “The Art of Multiprocessor Programming” by Herlihy & Shavit, chapter 8.
System Programming Practical Session 4: Concurrency / Safety.
1 Condition Variables CS 241 Prof. Brighten Godfrey March 16, 2012 University of Illinois.
ANU COMP2110 Software Design in 2003 Lecture 10Slide 1 COMP2110 Software Design in 2004 Lecture 12 Documenting Detailed Design How to write down detailed.
CS533 – Spring Jeanie M. Schwenk Experiences and Processes and Monitors with Mesa What is Mesa? “Mesa is a strongly typed, block structured programming.
U NIVERSITY OF M ASSACHUSETTS A MHERST Department of Computer Science Computer Systems Principles Synchronization Emery Berger and Mark Corner University.
CP — Concurrent Programming 6. Liveness and Guarded Methods Prof. O. Nierstrasz Wintersemester 2005 / 2006.
PROGRAMMING PRE- AND POSTCONDITIONS, INVARIANTS AND METHOD CONTRACTS B MODULE 2: SOFTWARE SYSTEMS 13 NOVEMBER 2013.
1 Previous Lecture Overview  semaphores provide the first high-level synchronization abstraction that is possible to implement efficiently in OS. This.
System Programming Practical Session 4: Concurrency / Safety.
CSC Multiprocessor Programming, Spring, 2012 Outline for Chapter 4 – Composing Objects – thread-safe object-oriented composition, Dr. Dale E. Parson,
Monitor Pattern Read only Collection views Synchronized Collections views Concurrent HashMap The Vehicle Tracker Example.
Healing Data Races On-The-Fly
About the Presentations
Synchronization Lecture 23 – Fall 2017.
Synchronization Lecture 24 – Fall 2018.
More on Thread Safety CSE451 Andrew Whitaker.
Race Conditions & Synchronization
Synchronization Lecture 24 – Fall 2018.
Java Concurrency 17-Jan-19.
Lecture 9 Synchronization.
Java Concurrency.
Java Concurrency.
Synchronization Lecture 24 – Fall 2018.
Java Concurrency 29-May-19.
Synchronization Lecture 24 – Fall 2018.
Presentation transcript:

1 Chapter years of CS and SE devoted to issues of composability: how to create solutions to big problems by combining (composing) solutions to smaller problems  Mechanisms – e.g. intrinsic locks; GC  Techniques – Invariants, pre- and post- conditions; confinement; delegation; etc. (Ch4)  Libraries – working code embodying the techniques for specific domains (Ch 5) This chapter mainly about techniques

2 Invariants – the fundamental technique What property is always true of an object when it is in a correct state? For sequential programming, the class invariant gives you critical information about what each public method needs to achieve For concurrent programming, the class invariant tells you which fields are related and therefore have to be protected by a single lock

3 Post-conditions and Pre-conditions The post-condition of a method tells you what that method is supposed to accomplish  (A no-op will preserve the invariant but that’s not very interesting or useful!) The pre-condition tells you what (beyond the invariant) is supposed to be true for a method to successfully reach the post-condition  In sequential programming calling a method when its precondition is false is an error  In concurrent programming we can wait for the precondition to become true

Two common problems Composing a thread-safe class from unsafe building blocks Composing a thread-safe class when the building blocks are already thread-safe

Confinement Technique (4.2) – thread- safe object built from unsafe objects Allow access to a thread-unsafe object only through another object that is thread-safe public class PersonSet { private final Set mySet = new HashSet (); public synchronized void add(Person p) { mySet.add(p); } public synchronized boolean contains(Person p) { return myset.contains(p); } } hashSet is not ThreadSafe, PersonSet is Idea of ownership: PersonSet owns mySet but probably not the Persons contained in it

Monitors (4.2.1) (aside) Idea: a syntactic construct that pairs lock acquisition and release around a block of code  synchronized(foo) { … }  compared to explicit lock acquisition and release, encourages structured programs and avoids bugs due to failure to release locks Along with a mechanism for releasing a lock, suspending, and reacquiring the lock  wait() And a mechanism to wake up suspended threads  notify(), notifyAll() Monitors were independently invented by Sir Anthony Hoare and Per Brinch-Hansen in the mid-1970’s.

Danger in Confinement Technique Inadvertant publication of what is supposed to be private (confined) mutable state public synchronized MutablePoint getLocation(String id) { MutablePoint loc = locations.get(id); return loc == null ? Null : new MutablePoint(loc); } Public synchronized setLocation(String id, int x, int y) { MutablePoint loc = locations.get(id); if (loc == null) { … exception …} loc.x = x; loc.y = y } My preference would be to express this interface using ImmutablePoints.

Thread-safe objects built from thread-safe components – Delegating safety (4.3) Delegation: giving responsibility for thread safety to the object(s) containing this object’s state  ConcurrentMap (TS) instead of Map (not TS)  Atomic If this object’s state involves multiple other objects delegation may or may not work  If the sub-objects are independent, ok  If the sub-objects are related, this object must provide its own synchronization – even if all the sub-objects are themselves thread-safe

Example class PongPaddle { private final AtomicInteger left = new AtomicInteger(0); private final AtomicInteger right = new AtomicInteger(1); public void move(int dx) { left.getAndAdd(dx); right.getAndAdd(dx); } public void changeWidth(int dw) { right.getAndAdd(dw); } public boolean hit(int pos) { return left.get()<=pos && pos <= right.get(); } No visibility concerns What is the invariant that relates left and right? What should we do to fix it?

Reduce, Reuse, Recycle I am very anti cut-and-paste coding  Hard on the reader  Hard on the maintainer  Instead of 1 change, n changes  Instead of 1 bug, n bugs Design code so there only needs to be one copy (use parameterization, polymorphic parameterization) Even better, reuse existing code that does almost the right thing How does this interact with synchronization?

Adding functionality (4.4) Example: add putIfAbsent to a collection that already supports atomic contains() and add() methods Four approaches  Modify existing class  Extend existing class or  Wrap existing class – “client-side” locking  Composition - Add to existing class  Best way but  Assumes you have control over the existing class

Extend the existing class public class BetterVector extends Vector { public synchronized boolean putIfAbsent(E x) { boolean absent = !contains(x); if (absent) { add(x); } return absent; } Note the benefit of re-entrant locks! Note the implicit assumption that we understand the way that Vector does synchronization – using intrinsic locks, in this case Note that we don’t have any dependency on Vector’s implementation Vector is thread-safe Vector provides enough primitive building blocks to allow construction of putIfAbsent

Client-side locking Assume v is a thread-safe list obtained from Collections.synchronizedList(new ArrayList ()); Type of this object is List -- not extendable Any code that wants to do putIfAbsent item x to such a list, v, can write synchronized (v) { if (!v.contains(x)) v.add(x); } Could be placed in a helper class – beware you have to synchronize on the list and not on the helper object Now spreading the synchronization far and wide Still depending on knowing the synch policy for the wrapped object

Composition Mimic the idea of Collections.synchronizedList  Provide all the synchronization in a new object that extends the functionality of an existing object instance (not class)  Delegates most operations to the existing object Public class ImprovedList implements List { private final List list; public ImprovedList(List list) { this.list = list; } public synchronized boolean putIfAbsent(T x) … public synchronized boolean contains(T x) { return list.contains(x); } …

Intro to Chapter 5 – Building Blocks Chapter 4 was about low-level techniques This chapter is about libraries – embodiments of the techniques Section 5.1 Synchronized collections – read to see why you want to use Concurrent collections instead (we will not cover)  The idioms described are even more unsafe than asserted in the book because of visibility problems

Chapter 5 topics Concurrent collections (5.2) The ubiquitous producer-consumer pattern (5.3) Interruptable methods (5.4) Primitive synchronizers (5.5)