Simple Concurrent Object-oriented Programming

  • Uploaded by: nguyenngocanh22
  • 0
  • 0
  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Simple Concurrent Object-oriented Programming as PDF for free.

More details

  • Words: 720
  • Pages: 21
Simple Concurrent Object-Oriented Programming Nati Fuks

Department of Computer Science, York University

SCOOP Outline  SCOOP Introduction  Generator  SCOOP vs Java  PRODUCER-CONSUMER example  SCOOP Semantics  Mapping from SCOOP to Eiffel+THREADs

Department of Computer Science, York University

Concurrency  Concurrent programming is difficult  e.g. Java Memory Flaw circa 1999  A variety of mechanisms must be mastered  Thread class, synchronize, wait, notify, mutexes, monitor, critical regions  Problems such as deadlock, safety and liveness properties, inheritance anomaly

Department of Computer Science, York University

SCOOP A single new keyword (separate) provides for a fullfledged concurrency mechanism !!!

SCOOP platform-independent

Eiffel + Threads

.NET Framework

Department of Computer Science, York University

POSIX



SCOOP SCOOP: Simple Concurrent Object-Oriented Programming. Defined by Bertrand Meyer in OOSC in 1997 Implementations: 1. Compton. Changes in the open source SmallEiffel compiler 2. This work 3. SCOOP in the .NET framework

Department of Computer Science, York University

SCOOP Generator Why SCOOP Generator? Object-Oriented Design Design By Contract Simple and intuitive concurrency model of SCOOP

What do we achieve? Concurrent programs using SCOOP

Department of Computer Science, York University

SCOOP Generator 

Eiffel SCOOP -> Eiffel + THREAD



Standard Eiffel code (mutexes and THREADs)



Eiffel Studio 5.4 Advantages 

Pure Eiffel



Independence



Target code is cross-platform

Disadvantage – Debugging on a target code Department of Computer Science, York University

Producer-Consumer Java Solution

Department of Computer Science, York University

Producer-Consumer SCOOP Solution

- same behaviour as the Java solution - only one extra keyword separate is used (||) - uses contracts with all the benefits of DbC

Department of Computer Science, York University

ROOT_CLASS class ROOT_CLASS creation make feature b: separate BUFFER p: PRODUCER -- declared separate c: CONSUMER -- declared separate make is do

end

end

-- Creation procedure. create b.make create p.make(b) create c.make(b)

Department of Computer Science, York University

Bounded BUFFER class BUFFER creation make feature put (x:INTEGER) is require count <= 3 do q.put(x) ensure count = old count + 1 and q.has (x) end remove is require count > 0 do q.remove ensure count = old count - 1 end … Department of Computer Science, York University

PRODUCER separate class PRODUCER creation make feature buffer: separate BUFFER make (b: separate BUFFER) is do …keep_producing … end keep_producing is do … produce(buffer,i) … end produce (b : separate BUFFER; i:INTEGER) is require b.count <= 2 do b.put(i) ensure b.has(i) end end

Department of Computer Science, York University

CONSUMER separate class CONSUMER creation make feature buffer: separate BUFFER make (b: separate BUFFER) is do …keep_consuming… end keep_consuming is do …consume(buffer)… end consume (b: separate BUFFER) is require b.count > 0 do b.remove ensure b.count = old b.count - 1 end end Department of Computer Science, York University

Synchronization in SCOOP A call to the routine produce with a separate will block until:

(a) the producer gets sole access to the buffer

+ (b) the buffer must not be full as indicated in the precondition

Department of Computer Science, York University

Preconditions in SCOOP if not buffer.full then buffer.put(value) produce (b: separate BUFFER; i: INTEGER) is require b.count <= 2 i >= 0 do b.put (i) end

Department of Computer Science, York University

Mapping to Eiffel + THREAD separate class ROOT_CLASS

feature

class ROOT_CLASS inherit THREAD_CONTROL feature request_pended: INTEGER_REF requests_pended_mutex:MUTEX

b:separate BUFFER b:BUFFER b_mutex: MUTEX p:PRODUCER p:PRODUCER

Department of Computer Science, York University

Mapping to Eiffel 2 make is do

create b.make

Department of Computer Science, York University

make is do requests_pended := 1

b_mutex.lock create b.make b_mutex.unlock

Mapping to Eiffel 3 create p.make (b) create p.make (b, b_mutex, requests_pended, requests_pended_mutex) p.launch set_feature_to_do ([Current, "KEEP_PRODUCING_ROUTINE"])

Department of Computer Science, York University

Mapping to Eiffel 4 create c.make (b)

same as p.make…

requests_pended_mutex.lock requests_pended.copy (requests_pended-1) requests_pended_mutex.unlock

end Department of Computer Science, York University

join_all end

Contributions  Analysis of Meyer’s SCOOP with a view to implementation – semantics of SCOOP via Compton’s subsystems  Based on the semantics of SCOOP – provided a mapping from SCOOP to Eiffel + Threads.  Generator parses SCOOP programs, flags syntax errors and automatically translates to portable executable code based on the mapping.  First full implementation of SCOOP  contracts  routine calls with multiple separate objects

Department of Computer Science, York University

Thank You

Department of Computer Science, York University

Related Documents


More Documents from "lipika008"