Resurrecting Ada s Rendez-Vous in Java
|
|
|
- Matilda George
- 10 years ago
- Views:
Transcription
1 Resurrecting Ada s Rendez-Vous in Java Luis Mateu, José M. Piquer and Juan León DCC - Universidad de Chile Casilla 2777, Santiago, Chile [email protected] Abstract Java is a programming language designed with concurrency in mind from its inception. However, the synchronization mechanism provided is a restricted version of Hoare s Monitors, being too low level for most applications. In this paper we propose a high level synchronization mechanism for Java, based on Ada s Rendez-Vous, adapting the notation and semantics to Java. The result is a nice and readable notation to control concurrency, even cleaner than the Ada original version. The Rendez-Vous syntax adds only one statement to Java, and we developed a preprocessor to translate the new statement to pure Java, using a class library which supports messages. Our implementation is available for downloading over the Internet. Keywords: Concurrency, Rendez-Vous, Java, Threads, Synchronization 1. Introduction Java[2] is one of the few programming languages including concurrency from its design, not only in the language, but also in its class library. For that reason, many Java applications use concurrency as a programming tool. Concurrent programming presents two fundamental problems: (i) concurrent access to a shared resource (as a memory data structure) must be synchronized to avoid inconsistencies. (ii) execution progress in different threads sometimes needs to be controlled, defining synchronization points. The tool provided by Java to solve both problems is a restricted version of Hoare s Monitors[5] which we will call This work has been partially funded by FONDEF project Java s Monitors[6]. Section 2 discusses this mechanism in detail. Even as Java s Monitors solve problem (i) correctly, we claim that they are unsuitable to solve problem (ii) in a general way. An example is given as appendix. The Ada[1, 7] programming language introduced the Rendez-Vous concept as its basic synchronization tool. Rendez-Vous is based on a message exchange paradigm (send/receive/reply) but uses a syntax closer to a function call, providing type checking. It is a high level construct, requiring some support from the language, because it is related to function call and return. In this paper we show how to enrich Java with Rendez- Vous, and we claim that the result is clearer, more elegant and simpler to use that the primitive Java s Monitor. In a sense it is even better than the original Ada s notation, because Java object orientation helps to simplify some constructs. In section 3 we summarize the concept of Java s Rendez- Vous and in section 4 we describe the syntactic extensions needed to include Rendez-Vous in Java. In section 5 we solve a few well-known synchronization problems with Java s Rendez-Vous to stress the elegance and simplicity of our proposal. Section 6 presents our implementation of a preprocessor which takes code written in Java enriched with Rendez-Vous and produces pure Java. Together with a class library implementing message-passing of obects in Java, it is available over the Internet at lmateu/ rendezvous.html. Section 7 and 8 presents future work and the conclusions. 2. Java s Monitors The mechanism provided by Java to synchronize threads is Java s Monitors[6]. In general, a shared object is implemented in a Monitor and we will call it a server. The threads that call the Monitor methods will be called clients. One of the strengths of this solution is that the client programming is simple. For example, we can consider the Buffer management 1
2 between producers and consumers. The Buffer is a server and producers and consumers are its clients. The Buffer is implemented using Java s Monitors and controls concurrency between all the clients. The clients are very simple, as all the synchronization details are hidden in the server. They just call a method, as shown : Producer buffer.put(item); Consumer Item item=buffer.get(); However, this simplicity in the client pays a price in complexity in the Monitor s code. The main problem is that Java s Monitors are not threads, they are passive objects belonging to a class with some of their methods marked with a synchronized attribute. This attribute guarantees mutual exclusion in the Monitor s execution. As an appendix, we show a Java s Monitor solution to the buffer management problem. We find that the solution is difficult to read and to program. It is also inefficient, because we are forced to use only one shared condition, awakening all the waiting processes and testing the condition in while statements. We invite the reader to propose better solutions, but we claim that Java s Monitors are unsuited for high level synchronization in object oriented programs, generating programs difficult to understand and to maintain. 3. Java s Rendez-Vous The basic synchronization mechanism in Ada is the Rendez-Vous[1, 7] between threads (tasks in the Ada s jargon). Rendez-Vous is a message-passing paradigm between threads, but using a notation closer to function call and return. In this section we present the adaptation of this concept into Java through the Buffer manager problem, and in the next section we will formalize the syntactic extensions needed to be added into the language. As in Ada, we will use an instruction to receive the messages in the server, and in the client we will keep the object invocation syntax to send the messages. For example, to send the requests to the Buffer manager, producers and consumers will continue to use the same syntax as with Java s Monitors: Producer buffer.put(item); Consumer Item item=buffer.get(); However, the semantics are not the same: the clients are sending a message to a thread (and not invoking a synchronized method) and buffer is a thread, not a passive object. The sender thread of a message remains blocked until a reply is sent back to it from buffer. This semantics is very close to blocking messages, as proposed in Thoth[3] and the V-system[4], but it also includes message tags (the method invoked) and the typechecking of function call and return in high-level languages. The main difference with Java s Monitors appears at the Buffer implementation, being now an independent thread, receiving messages in a loop serving the requests: public class Buffer extends ServerThread private int size; private Item itemarray[]; private int count=0, in=0, out=0; // Declare the two types of messages public message Item get(); public message void put(item item); // Constructor public Buffer(int isize) size= isize; itemarray= new Item[size]; start(); // Server Thread // Receive a Message when( count > 0 ) accept Item get() // it is a get message Item item = itemarray[out]; out = (out+1)%size; count--; reply(item); when( count < size ) accept void put(item item) // it is a put message itemarray[in] = item; in = (in+1)%size; count++; The instruction receives and processes one message. In this case, it receives messages of type put(item) or get(). The execution of is as follows: first the when conditions are evaluated to decide which type of messages are acceptable, then the queue of pending messages is scanned looking only for acceptable types. If none is available, the thread is stopped until an acceptable message arrives. For example, when the buffer is empty (count==0) only put(item) messages are accepted. 2
3 From the set of acceptable messages, the first in arrival order is accepted and the corresponding instructions are executed. The rest will be received in future calls to. Inside an accept, the reply instruction sends a message back to the original sender with a result value if any. For example, the value returned by buffer.get() in the client corresponds to the value passed as argument to reply(item) in the server s implementation of message get(). We claim that this semantics is easier to understand and to use than Java s Monitors. In particular, buffer being now a thread by itself, it s easier to see what is happening after a reply, where both client and server are executing concurrently. In contrast, in Java s Monitors, after a notify, execution cannot continue concurrently (because Monitors are regions of mutual exclusion), and the question is which thread will execute next, being important sometimes to guarantee the correctness of the solution. 4. The Statement We propose to add the following statement to the Java language: Syntax : delay msg : accept method-def when (bool-exp) accept method-def delay : // empty delay (time-exp) instructions The construct is only valid inside a class which extends the ServerThread class. The component method-def has the same syntax as a standard method declaration, with its formal parameters, return type, local variables and body. The name and signature of this method defines the type of message being accepted. The component delay is optional and is used to define a maximum blocking time. A class must declare all the message types to be accepted. This is done by declaring explicitly methods with the attribute message and with the name and signature of the message types. These declarations should have no instruction body (just like the declaration of an abstract method). The answer is specified in the Java s Monitors documentation, but the programmer never remembers it. ServerThread is a class that extends Thread with some fields needed by our implementation. We consider convenient also to add an instruction: accept : accept method-def as an abbreviation of: accept method-def 4.2. Semantics When determines which message is going to be received, the sender s parameters are bound to the receiver s and actions are executed. The delay statement is only useful when there are no acceptable messages in the queue, defining a maximum blocking time waiting for a message. If the when condition is empty, it is considered as true. In a statement, it is not necessary to specify all the possible message types. If a thread executes and there are messages in the queue but no one matches with any of the messages accepted (not even with a false when condition), the messages will remain there until the thread executes another including them. For example the Buffer manager can be written as: if (count==0) accept put(item item)... else if (count==size) accept Item get()... else accept put(item item)... accept Item get()... Not only messages can be accepted in different places, even the actions executed can differ. The parameters name can also change, but not its type, because it would be another type of message (due to overloading) Reply A message is replied using: thread.reply(value) where thread is the receiver of the original message. When the reply is invoked inside the lexical scope of the receiver class, it is enough to write reply because Java automatically add this in front of the call, corresponding to the receiver. 3
4 The value passed to reply must be of the same type as the return value of this message. The invocation of reply(value) resumes the operation of the sender of the message, returning value as result. In the receiver, reply does not return a value. From this point, sender and receiver execute concurrently. The message must be replied by the receiver thread and it must be done while executing the instruction body associated with the reception of that message. The reply does not need to be the last instruction of the accept clause. In fact, it is better to call it as soon as possible, to increase the concurrency between client and server. For example, the Buffer manager statement could be rewritten as: when (count>0) accept Item get() // it is a get message reply(itemarray[out]); out= (out+1)%size; count--; when (count<size) accept void put(item item) // it is a put message itemarray[in]= item; in= (in+1)%size; count++; 4.4. Inheritance Inheritance does not introduce any conceptual difficulty to our rendez vous system : message types are inherited from the base class (just like normal methods are inherited), so the derived class may accept them without redeclaring them. Moreover, the meaning of redefining a message type as a normal method or viceversa is straight-forward. When the derived class redefines a message type as a normal method (by specifying an instruction body), it means that a thread invoking this method will execute directly the instruction body without any rendez vous with the server thread. Inside that method, the programmer can still force the rendez vous by invoking the method of the base class (using super). On the other hand, the derived class may redefine a normal method to be a message type, by declaring that method with the attribute message. Therefore, other threads invoking this method will send now a message to the server class instead of executing it directly. However, the programmer should pay attention to not redefine a method as a message when that method could be invoked from the same server thread, because this will be a dead-lock. 5. Examples In this section we will solve some classic synchronization problems to show the power of Java s Rendez-Vous Semaphores Rendez-Vous is powerful enough to implement any other synchronization primitive, such as semaphores: public class Semaphore extends ServerThread private int count; public message void P(); public message void V(); public Semaphore(int icount) count= icount; start(); when (count>0) accept void P() count--; accept void V() count++; 5.2. Readers/Writers The idea is to allow access to concurrent readers, but only one exclusive writer at a time to a shared structure. The problem is solved introducing a coordinator. When a reader wants access to the structure, it calls coord.enterread(). When it ends its operation, it calls coord.exitread(). On the other hand, the writer uses coord.enterwrite() and coord.exitwrite(). The coordinator decides to which thread it gives access, simply replying the enter call of the chosen thread. The proposed implementation accepts entries in a FIFO order, allowing concurrent reader access. To avoid starvation, once a writer is detected, all access is suspended until all readers have exited. 4
5 public class Coordinator extends ServerThread public Coordinator() start(); public message void enterread(); public message void exitread(); public message void enterwrite(); public message void exitwrite(); private int readers= 0; accept enterread() readers++; accept exitread() // (1) readers--; // on arrival of a writer accept enterwrite() // block this request and any // other until all readers // notify exit while (readers>0) accept exitread() // (2) readers--; // now let the writer continue // and block any other reader // or writer until the writer // finishes accept exitwrite() This example shows the power of Rendez-Vous. In (1) the exitread() message is accepted together with any other message. Instead, in (2) the exitread() message is accepted alone, waiting for every reader to leave. We can see also how enterwrite() is accepted but its reply is delayed until all the exitread() messages have been processed Recursive Iterators One interesting example is to build an iterator returning one by one the leaves of a tree: public class TreeIterator extends ServerThread private Tree tree; public message Leaf get(); public TreeIterator(Tree itree) tree= itree; start(); visit(tree); accept Leaf get() reply(null); void visit(tree tree) if (tree==null) return; else if (tree instanceof Leaf) accept Leaf get() reply((leaf)tree); else // tree instanceof Node visit(((node)tree).left); visit(((node)tree).right); We have here a server that will return a different leaf at each invocation of tree.get(), and null when there are no more leaves. 6. Implementation Our implementation of rendez-vous consists of (i) a class library for sending and receiving messages and (ii) a preprocessor which takes code written in Java enriched with the statement and produces the equivalent code in standard Java with calls to the class library. In this section we show the code produced by the preprocessor. We have beautified this code for the sake of exhibiting a more readable code. For example, the identifiers added by the preprocessor have unusual characters so they don t interfere with the programmers identifiers, but we won t show such characters. The implementation of the class library is straightforward so we won t discuss this issue here. The preprocessor performs the following steps : A Lisp-like symbol is associated with each message type appearing at any statement into the class definition. In the buffer example the generated code is : static final Symbol Item_get_void= Symbol.make("Item_get_void"); static final Symbol void_put_item= Symbol.make("void_put_Item"); The main idea here is that two invocations of Symbol.make with an equal string shall return the same object. This object will be used for identifying the type of the message. 5
6 For each message type, an additional class is defined. The sender will put the arguments of a message into objects of this class. This class extends from a library class which will also include an instance variable to store the return value. For the put(item) message of the buffer class the preprocessor will generate the following class : public class VoidMsg_put_Item extends VoidMsg Item par0; For the message get(), the preprocessor uses the library class ObjMsg which includes a field to store the returned object. No new class will be generated because this message does not take any argument. For each message type, the preprocessor adds a stub method to the original class. This stub will be invoked by emitters to send messages of that type. For the buffer, the following stubs are added : public Item get() ObjMsg msg= new ObjMsg(); msg.settype(item_get_void); this.call(msg); return (Item)msg.ret; public void put(item par0) VoidMsg_put_Item msg= new VoidMsg_put_Item(); msg.settype(void_put_item); msg.par0= par0; this.call(msg); return; The preprocessor translates the statement into a Java standard switch statement. In the buffer example, the statement is replaced by the following code : reset(); // no message types accepted // Evaluate each condition and enable // corresponding message type if (count>0) enable(item_get_void); if (count<size) enable(void_put_item); // save previous message (1) Msg prevmsg= currmsg; // Places the next message in currmsg (); try if (currmsg.type==item_get_void)... the code for get()... else if (currmsg.type==void_put_item) VoidMsg_put_Item msg= (VoidMsg_put_Item)currMsg; Item item= msg.par0;... the code for put()... finally currmsg= prevmsg; // (2) The variable currmsg is an instance variable for the class ServerThread and keeps the message which is being processed. The current message is saved in (1) and restored in (2) for the proper working of nested s. 7. Future work We are considering the implementation of message forwarding[3]. With this feature a thread can resend a message to a third thread without being blocked for a reply. This feature is important for building router threads. This kind of thread accepts a message, shortly looks at its content and forwards the message to any thread interested in such content. The advantage of forwarding a message, instead of just sending it, is that the router does not require a reply, and can therefore accept a new message quickly. The main idea is to add the method forward to the class ServerThread. This method shall be invoked from the actions a thread executes at message reception : forward(forwthread) The new destination of the message (forwthread) shall accept the message with, just as if the message had been sent to it from the beginning. The method forward returns immediately without waiting for a reply, but the original sender of the message does continue waiting for a message reply. 8. Conclusions The elegance of rendez-vous over Java s Monitors is due to : The foundation of rendez-vous is the message metaphor which is well understood, simple, intuitive an predictable. This reduces the learning time required by programmers to master its use. 6
7 On the other hand, monitors are based on the critical section concept, the very simplest problem of synchronization. Wait and notify are low-level additions to support general synchronization, but we really cannot find a metaphor behind wait or notify. A very convenient feature of rendez-vous is that we accept messages at the place in the code where it s easier to accept them. The messages we are not prepared to accept now are queued and shall be accepted on others section of the code. On the other hand, with monitors we have to accept requests always at the beginning of the definition entry for that request. Therefore writing iterators for recursive data structure with monitors can be very painful. Condition variables help to delay requests when they cannot be honoured immediately, but the use of conditions in Java is limited because monitors can have just one condition. In general, we claim that rendez-vous allows programmers to produce code which is more elegant and more readable that the code they would produce with monitors. This means less development time and less maintenance time. The simplicity of rendez-vous over monitors may even make threads accessible to the mean programmer. The syntactic integration of rendez-vous in Java is needed because its implementation through a class library will force programmers to package message information into a data structure, which would be much less convenient than the simple binding of the arguments on the sender with the formal parameters on the receiver (like monitors). In this way, our syntactical integration of rendez-vous in Java combines the best of typical messages libraries with the best of monitors. The main contributions of this work are first to show that Ada s rendez-vous fits very well with Java philosophy and second to provide a working implementation to experiment with rendez-vous in Java. References [1] Rationale for the design of the ada programming language. SIGPLAN Notices, 14(6), June [2] K. Arnold and J. Gosling. The Java Programming Language. Addison-Wesley, [3] D. R. Cheriton, M. A. Malcolm, L. S. Melen, and G. R. Sager. Thoth, a portable real-time operating system. Communications of the ACM, 22(2), Feb [4] D. R. Cheriton and W. Zwaenepoel. The distributed v kernel and its performance for diskless workstations. In SOSP 83, pages , [5] C. A. R. Hoare. Monitors: An operating system structuring concept. Communications of the ACM, 17(10): , Oct [6] S. Oaks and H. Wong. Java Threads. O Reilly & Associates, [7] J. Stanley, D. Krantz, J. Fung, and P. Stachour. Ada, a Programmer s Guide with Microcomputer Examples. Addison- Wesley, Appendix: Java s Monitors Example On the classical solution of the buffer problem using monitors, there is a condition variable for blocking consumers when the buffer is full and a second condition variable for blocking producers when the buffer is empty. However, Java only allows one condition variable for each monitor. To share the condition is not trivial, because raise conditions can arise between producers and consumers. The proposed solution avoids this problem notifying every waiting thread everytime the buffer changes. On the other hand, the waiting threads must check in (*) and (**) that their conditions are met in a while statement. public class Buffer private final int size= 10; private Item itemarray[]= new Item[size]; private int in=0, out=0, count=0; public synchronized void put(item item) try while (count==size) wait(); // (*) catch ( InterruptedException e ) itemarray[in]= item; in= (in+1)%size; notifyall(); public synchronized Item get() try while (count==0) wait(); // (**) catch ( InterruptedException e ) Item item= itemarray[out]; out= (out+1)%size; notifyall(); return item; Please note that any attempt to improve the performance replacing the notifyall by a single notify would almost certainly result in a buggy solution. 7
Monitors, Java, Threads and Processes
Monitors, Java, Threads and Processes 185 An object-oriented view of shared memory A semaphore can be seen as a shared object accessible through two methods: wait and signal. The idea behind the concept
3C03 Concurrency: Condition Synchronisation
3C03 Concurrency: Condition Synchronisation Mark Handley 1 Goals n Introduce concepts of Condition synchronisation Fairness Starvation n Modelling: Relationship between guarded actions and condition synchronisation?
Outline of this lecture G52CON: Concepts of Concurrency
Outline of this lecture G52CON: Concepts of Concurrency Lecture 10 Synchronisation in Java Natasha Alechina School of Computer Science [email protected] mutual exclusion in Java condition synchronisation
Mutual Exclusion using Monitors
Mutual Exclusion using Monitors Some programming languages, such as Concurrent Pascal, Modula-2 and Java provide mutual exclusion facilities called monitors. They are similar to modules in languages that
Glossary of Object Oriented Terms
Appendix E Glossary of Object Oriented Terms abstract class: A class primarily intended to define an instance, but can not be instantiated without additional methods. abstract data type: An abstraction
Real Time Programming: Concepts
Real Time Programming: Concepts Radek Pelánek Plan at first we will study basic concepts related to real time programming then we will have a look at specific programming languages and study how they realize
Last Class: Semaphores
Last Class: Semaphores A semaphore S supports two atomic operations: S Wait(): get a semaphore, wait if busy semaphore S is available. S Signal(): release the semaphore, wake up a process if one is waiting
Tuple spaces and Object spaces. Distributed Object Systems 12. Tuple spaces and Object spaces. Communication. Tuple space. Mechanisms 2.
Distributed Object Systems 12 Tuple spaces and Object spaces Tuple spaces and Object spaces Tuple spaces Shared memory as a mechanism for exchanging data in a distributed setting (i.e. separate from processes)
Design Patterns in C++
Design Patterns in C++ Concurrency Patterns Giuseppe Lipari http://retis.sssup.it/~lipari Scuola Superiore Sant Anna Pisa May 4, 2011 G. Lipari (Scuola Superiore Sant Anna) Concurrency Patterns May 4,
Hoare-Style Monitors for Java
Hoare-Style Monitors for Java Theodore S Norvell Electrical and Computer Engineering Memorial University February 17, 2006 1 Hoare-Style Monitors Coordinating the interactions of two or more threads can
Lecture 6: Semaphores and Monitors
HW 2 Due Tuesday 10/18 Lecture 6: Semaphores and Monitors CSE 120: Principles of Operating Systems Alex C. Snoeren Higher-Level Synchronization We looked at using locks to provide mutual exclusion Locks
Chapter 6 Concurrent Programming
Chapter 6 Concurrent Programming Outline 6.1 Introduction 6.2 Monitors 6.2.1 Condition Variables 6.2.2 Simple Resource Allocation with Monitors 6.2.3 Monitor Example: Circular Buffer 6.2.4 Monitor Example:
CS11 Java. Fall 2014-2015 Lecture 7
CS11 Java Fall 2014-2015 Lecture 7 Today s Topics! All about Java Threads! Some Lab 7 tips Java Threading Recap! A program can use multiple threads to do several things at once " A thread can have local
Parallel Programming
Parallel Programming 0024 Recitation Week 7 Spring Semester 2010 R 7 :: 1 0024 Spring 2010 Today s program Assignment 6 Review of semaphores Semaphores Semaphoren and (Java) monitors Semaphore implementation
www.virtualians.pk CS506 Web Design and Development Solved Online Quiz No. 01 www.virtualians.pk
CS506 Web Design and Development Solved Online Quiz No. 01 Which of the following is a general purpose container? JFrame Dialog JPanel JApplet Which of the following package needs to be import while handling
Lecture 6: Introduction to Monitors and Semaphores
Concurrent Programming 19530-V (WS01) Lecture 6: Introduction to Monitors and Semaphores Dr. Richard S. Hall [email protected] Concurrent programming November 27, 2001 Abstracting Locking Details
Semaphores and Monitors: High-level Synchronization Constructs
Semaphores and Monitors: High-level Synchronization Constructs 1 Synchronization Constructs Synchronization Coordinating execution of multiple threads that share data structures Past few lectures: Locks:
! Past few lectures: Ø Locks: provide mutual exclusion Ø Condition variables: provide conditional synchronization
1 Synchronization Constructs! Synchronization Ø Coordinating execution of multiple threads that share data structures Semaphores and Monitors: High-level Synchronization Constructs! Past few lectures:
Fundamentals of Java Programming
Fundamentals of Java Programming This document is exclusive property of Cisco Systems, Inc. Permission is granted to print and copy this document for non-commercial distribution and exclusive use by instructors
Computing Concepts with Java Essentials
2008 AGI-Information Management Consultants May be used for personal purporses only or by libraries associated to dandelon.com network. Computing Concepts with Java Essentials 3rd Edition Cay Horstmann
Language Evaluation Criteria. Evaluation Criteria: Readability. Evaluation Criteria: Writability. ICOM 4036 Programming Languages
ICOM 4036 Programming Languages Preliminaries Dr. Amirhossein Chinaei Dept. of Electrical & Computer Engineering UPRM Spring 2010 Language Evaluation Criteria Readability: the ease with which programs
Chapter 1. Dr. Chris Irwin Davis Email: [email protected] Phone: (972) 883-3574 Office: ECSS 4.705. CS-4337 Organization of Programming Languages
Chapter 1 CS-4337 Organization of Programming Languages Dr. Chris Irwin Davis Email: [email protected] Phone: (972) 883-3574 Office: ECSS 4.705 Chapter 1 Topics Reasons for Studying Concepts of Programming
Embedded Programming in C/C++: Lesson-1: Programming Elements and Programming in C
Embedded Programming in C/C++: Lesson-1: Programming Elements and Programming in C 1 An essential part of any embedded system design Programming 2 Programming in Assembly or HLL Processor and memory-sensitive
Monitors & Condition Synchronization
Chapter 5 Monitors & Condition Synchronization 1 monitors & condition synchronization Concepts: monitors: encapsulated data + access procedures mutual exclusion + condition synchronization nested monitors
Curriculum Map. Discipline: Computer Science Course: C++
Curriculum Map Discipline: Computer Science Course: C++ August/September: How can computer programs make problem solving easier and more efficient? In what order does a computer execute the lines of code
Java Interview Questions and Answers
1. What is the most important feature of Java? Java is a platform independent language. 2. What do you mean by platform independence? Platform independence means that we can write and compile the java
Android Application Development Course Program
Android Application Development Course Program Part I Introduction to Programming 1. Introduction to programming. Compilers, interpreters, virtual machines. Primitive data types, variables, basic operators,
Monitor Object. An Object Behavioral Pattern for Concurrent Programming. Douglas C. Schmidt
Monitor Object An Object Behavioral Pattern for Concurrent Programming Douglas C. Schmidt [email protected] Department of Computer Science Washington University, St. Louis 1 Intent The Monitor Object
The C Programming Language course syllabus associate level
TECHNOLOGIES The C Programming Language course syllabus associate level Course description The course fully covers the basics of programming in the C programming language and demonstrates fundamental programming
Moving from CS 61A Scheme to CS 61B Java
Moving from CS 61A Scheme to CS 61B Java Introduction Java is an object-oriented language. This document describes some of the differences between object-oriented programming in Scheme (which we hope you
Rigorous Software Development CSCI-GA 3033-009
Rigorous Software Development CSCI-GA 3033-009 Instructor: Thomas Wies Spring 2013 Lecture 5 Disclaimer. These notes are derived from notes originally developed by Joseph Kiniry, Gary Leavens, Erik Poll,
Transparent Redirection of Network Sockets 1
Transparent Redirection of Network Sockets 1 Timothy S. Mitrovich, Kenneth M. Ford, and Niranjan Suri Institute for Human & Machine Cognition University of West Florida {tmitrovi,kford,nsuri}@ai.uwf.edu
A Thread Monitoring System for Multithreaded Java Programs
A Thread Monitoring System for Multithreaded Java Programs Sewon Moon and Byeong-Mo Chang Department of Computer Science Sookmyung Women s University, Seoul 140-742, Korea [email protected], [email protected]
COMMMUNICATING COOPERATING PROCESSES
COMMMUNICATING COOPERATING PROCESSES The producer-consumer paradigm A buffer of items can be filled by the producer and emptied by the consumer. The producer and the consumer must be synchronized: the
KITES TECHNOLOGY COURSE MODULE (C, C++, DS)
KITES TECHNOLOGY 360 Degree Solution www.kitestechnology.com/academy.php [email protected] [email protected] Contact: - 8961334776 9433759247 9830639522.NET JAVA WEB DESIGN PHP SQL, PL/SQL
PROBLEM SOLVING SEVENTH EDITION WALTER SAVITCH UNIVERSITY OF CALIFORNIA, SAN DIEGO CONTRIBUTOR KENRICK MOCK UNIVERSITY OF ALASKA, ANCHORAGE PEARSON
PROBLEM SOLVING WITH SEVENTH EDITION WALTER SAVITCH UNIVERSITY OF CALIFORNIA, SAN DIEGO CONTRIBUTOR KENRICK MOCK UNIVERSITY OF ALASKA, ANCHORAGE PEARSON Addison Wesley Boston San Francisco New York London
Lecture 9. Semantic Analysis Scoping and Symbol Table
Lecture 9. Semantic Analysis Scoping and Symbol Table Wei Le 2015.10 Outline Semantic analysis Scoping The Role of Symbol Table Implementing a Symbol Table Semantic Analysis Parser builds abstract syntax
Transparent Redirection of Network Sockets 1
Transparent Redirection of Network Sockets Timothy S. Mitrovich, Kenneth M. Ford, and Niranjan Suri Institute for Human & Machine Cognition University of West Florida {tmitrovi,kford,[email protected].
Chapter 6: Programming Languages
Chapter 6: Programming Languages Computer Science: An Overview Eleventh Edition by J. Glenn Brookshear Copyright 2012 Pearson Education, Inc. Chapter 6: Programming Languages 6.1 Historical Perspective
C++ INTERVIEW QUESTIONS
C++ INTERVIEW QUESTIONS http://www.tutorialspoint.com/cplusplus/cpp_interview_questions.htm Copyright tutorialspoint.com Dear readers, these C++ Interview Questions have been designed specially to get
Java EE Web Development Course Program
Java EE Web Development Course Program Part I Introduction to Programming 1. Introduction to programming. Compilers, interpreters, virtual machines. Primitive types, variables, basic operators, expressions,
ECE 122. Engineering Problem Solving with Java
ECE 122 Engineering Problem Solving with Java Introduction to Electrical and Computer Engineering II Lecture 1 Course Overview Welcome! What is this class about? Java programming somewhat software somewhat
Chapter 8 Implementing FSP Models in Java
Chapter 8 Implementing FSP Models in Java 1 8.1.1: The Carpark Model A controller is required for a carpark, which only permits cars to enter when the carpark is not full and does not permit cars to leave
Concurrent Programming
Concurrent Programming Shared Memory Passing the baton Monitors Verónica Gaspes www.hh.se/staff/vero CERES, November 2, 2007 ceres Outline 1 Recap 2 Readers & Writers Readers & writers (mutual exclusion)
Getting Started with the Internet Communications Engine
Getting Started with the Internet Communications Engine David Vriezen April 7, 2014 Contents 1 Introduction 2 2 About Ice 2 2.1 Proxies................................. 2 3 Setting Up ICE 2 4 Slices 2
Chapter 5 Names, Bindings, Type Checking, and Scopes
Chapter 5 Names, Bindings, Type Checking, and Scopes Chapter 5 Topics Introduction Names Variables The Concept of Binding Type Checking Strong Typing Scope Scope and Lifetime Referencing Environments Named
Integrating Formal Models into the Programming Languages Course
Integrating Formal Models into the Programming Languages Course Allen B. Tucker Robert E. Noonan Computer Science Department Computer Science Department Bowdoin College College of William and Mary Brunswick,
Evolution of the Major Programming Languages
142 Evolution of the Major Programming Languages Object Oriented Programming: Smalltalk Object-Oriented: It s fundamental characteristics are: Data abstraction, Inheritance and Dynamic Binding. The essence
Concurrent C* N. H. Gehani W. D. Roome. AT&T Bell Laboratories Murray Hill, New Jersey 07974
Concurrent C* N. H. Gehani W. D. Roome AT&T Bell Laboratories Murray Hill, New Jersey 07974 1. Introduction Concurrent programming is becoming increasingly important because multicomputer architectures,
Scoping (Readings 7.1,7.4,7.6) Parameter passing methods (7.5) Building symbol tables (7.6)
Semantic Analysis Scoping (Readings 7.1,7.4,7.6) Static Dynamic Parameter passing methods (7.5) Building symbol tables (7.6) How to use them to find multiply-declared and undeclared variables Type checking
The Java Series. Java Essentials I What is Java? Basic Language Constructs. Java Essentials I. What is Java?. Basic Language Constructs Slide 1
The Java Series Java Essentials I What is Java? Basic Language Constructs Slide 1 What is Java? A general purpose Object Oriented programming language. Created by Sun Microsystems. It s a general purpose
It is the thinnest layer in the OSI model. At the time the model was formulated, it was not clear that a session layer was needed.
Session Layer The session layer resides above the transport layer, and provides value added services to the underlying transport layer services. The session layer (along with the presentation layer) add
Overview Motivating Examples Interleaving Model Semantics of Correctness Testing, Debugging, and Verification
Introduction Overview Motivating Examples Interleaving Model Semantics of Correctness Testing, Debugging, and Verification Advanced Topics in Software Engineering 1 Concurrent Programs Characterized by
Stack Allocation. Run-Time Data Structures. Static Structures
Run-Time Data Structures Stack Allocation Static Structures For static structures, a fixed address is used throughout execution. This is the oldest and simplest memory organization. In current compilers,
C Compiler Targeting the Java Virtual Machine
C Compiler Targeting the Java Virtual Machine Jack Pien Senior Honors Thesis (Advisor: Javed A. Aslam) Dartmouth College Computer Science Technical Report PCS-TR98-334 May 30, 1998 Abstract One of the
Journal of Information Technology Management SIGNS OF IT SOLUTIONS FAILURE: REASONS AND A PROPOSED SOLUTION ABSTRACT
Journal of Information Technology Management ISSN #1042-1319 A Publication of the Association of Management SIGNS OF IT SOLUTIONS FAILURE: REASONS AND A PROPOSED SOLUTION MAJED ABUSAFIYA NEW MEXICO TECH
SSC - Concurrency and Multi-threading Java multithreading programming - Synchronisation (I)
SSC - Concurrency and Multi-threading Java multithreading programming - Synchronisation (I) Shan He School for Computational Science University of Birmingham Module 06-19321: SSC Outline Outline of Topics
09336863931 : provid.ir
provid.ir 09336863931 : NET Architecture Core CSharp o Variable o Variable Scope o Type Inference o Namespaces o Preprocessor Directives Statements and Flow of Execution o If Statement o Switch Statement
Object-Oriented Software Specification in Programming Language Design and Implementation
Object-Oriented Software Specification in Programming Language Design and Implementation Barrett R. Bryant and Viswanathan Vaidyanathan Department of Computer and Information Sciences University of Alabama
A Java-based system support for distributed applications on the Internet
A Java-based system support for distributed applications on the Internet D. Hagimont 1, D. Louvegnies 2 SIRAC Project INRIA, 655 av. de l Europe, 38330 Montbonnot Saint-Martin, France Abstract: We have
Programming Languages
Programming Languages Qing Yi Course web site: www.cs.utsa.edu/~qingyi/cs3723 cs3723 1 A little about myself Qing Yi Ph.D. Rice University, USA. Assistant Professor, Department of Computer Science Office:
Replication on Virtual Machines
Replication on Virtual Machines Siggi Cherem CS 717 November 23rd, 2004 Outline 1 Introduction The Java Virtual Machine 2 Napper, Alvisi, Vin - DSN 2003 Introduction JVM as state machine Addressing non-determinism
Java (12 Weeks) Introduction to Java Programming Language
Java (12 Weeks) Topic Lecture No. Introduction to Java Programming Language 1 An Introduction to Java o Java as a Programming Platform, The Java "White Paper" Buzzwords, Java and the Internet, A Short
Software quality improvement via pattern matching
Software quality improvement via pattern matching Radu Kopetz and Pierre-Etienne Moreau INRIA & LORIA {Radu.Kopetz, [email protected] Abstract. Nested if-then-else statements is the most common
Advanced compiler construction. General course information. Teacher & assistant. Course goals. Evaluation. Grading scheme. Michel Schinz 2007 03 16
Advanced compiler construction Michel Schinz 2007 03 16 General course information Teacher & assistant Course goals Teacher: Michel Schinz [email protected] Assistant: Iulian Dragos INR 321, 368 64
Last Class: OS and Computer Architecture. Last Class: OS and Computer Architecture
Last Class: OS and Computer Architecture System bus Network card CPU, memory, I/O devices, network card, system bus Lecture 3, page 1 Last Class: OS and Computer Architecture OS Service Protection Interrupts
CEC225 COURSE COMPACT
CEC225 COURSE COMPACT Course GEC 225 Applied Computer Programming II(2 Units) Compulsory Course Duration Two hours per week for 15 weeks (30 hours) Lecturer Data Name of the lecturer: Dr. Oyelami Olufemi
Concurrency in Object-Oriented Programming Languages
Chapter 2 Concurrency in Object-Oriented Programming Languages Michael Papathomas Abstract An essential motivation behind concurrent object-oriented programming is to exploit the software reuse potential
Chapter 2: Algorithm Discovery and Design. Invitation to Computer Science, C++ Version, Third Edition
Chapter 2: Algorithm Discovery and Design Invitation to Computer Science, C++ Version, Third Edition Objectives In this chapter, you will learn about: Representing algorithms Examples of algorithmic problem
language 1 (source) compiler language 2 (target) Figure 1: Compiling a program
CS 2112 Lecture 27 Interpreters, compilers, and the Java Virtual Machine 1 May 2012 Lecturer: Andrew Myers 1 Interpreters vs. compilers There are two strategies for obtaining runnable code from a program
Concurrent programming in Java
Concurrent programming in Java INF4140 04.10.12 Lecture 5 0 Book: Andrews - ch.05 (5.4) Book: Magee & Kramer ch.04 - ch.07 INF4140 (04.10.12) Concurrent programming in Java Lecture 5 1 / 33 Outline 1 Monitors:
Integration of Application Business Logic and Business Rules with DSL and AOP
Integration of Application Business Logic and Business Rules with DSL and AOP Bogumiła Hnatkowska and Krzysztof Kasprzyk Wroclaw University of Technology, Wyb. Wyspianskiego 27 50-370 Wroclaw, Poland [email protected]
Syntax Check of Embedded SQL in C++ with Proto
Proceedings of the 8 th International Conference on Applied Informatics Eger, Hungary, January 27 30, 2010. Vol. 2. pp. 383 390. Syntax Check of Embedded SQL in C++ with Proto Zalán Szűgyi, Zoltán Porkoláb
CSE 373: Data Structure & Algorithms Lecture 25: Programming Languages. Nicki Dell Spring 2014
CSE 373: Data Structure & Algorithms Lecture 25: Programming Languages Nicki Dell Spring 2014 What is a Programming Language? A set of symbols and associated tools that translate (if necessary) collections
Thread Synchronization and the Java Monitor
Articles News Weblogs Buzz Chapters Forums Table of Contents Order the Book Print Email Screen Friendly Version Previous Next Chapter 20 of Inside the Java Virtual Machine Thread Synchronization by Bill
The ConTract Model. Helmut Wächter, Andreas Reuter. November 9, 1999
The ConTract Model Helmut Wächter, Andreas Reuter November 9, 1999 Overview In Ahmed K. Elmagarmid: Database Transaction Models for Advanced Applications First in Andreas Reuter: ConTracts: A Means for
Operating Systems Concepts: Chapter 7: Scheduling Strategies
Operating Systems Concepts: Chapter 7: Scheduling Strategies Olav Beckmann Huxley 449 http://www.doc.ic.ac.uk/~ob3 Acknowledgements: There are lots. See end of Chapter 1. Home Page for the course: http://www.doc.ic.ac.uk/~ob3/teaching/operatingsystemsconcepts/
OpenCL Static C++ Kernel Language Extension
OpenCL Static C++ Kernel Language Extension Document Revision: 04 Advanced Micro Devices Authors: Ofer Rosenberg, Benedict R. Gaster, Bixia Zheng, Irina Lipov December 15, 2011 Contents 1 Overview... 3
Java the UML Way: Integrating Object-Oriented Design and Programming
Java the UML Way: Integrating Object-Oriented Design and Programming by Else Lervik and Vegard B. Havdal ISBN 0-470-84386-1 John Wiley & Sons, Ltd. Table of Contents Preface xi 1 Introduction 1 1.1 Preliminaries
Built-in Concurrency Primitives in Java Programming Language. by Yourii Martiak and Mahir Atmis
Built-in Concurrency Primitives in Java Programming Language by Yourii Martiak and Mahir Atmis Overview One of the many strengths of Java is the built into the programming language support for concurrency
Database Access via Programming Languages
Database Access via Programming Languages SQL is a direct query language; as such, it has limitations. Some reasons why access to databases via programming languages is needed : Complex computational processing
The Sun Certified Associate for the Java Platform, Standard Edition, Exam Version 1.0
The following applies to all exams: Once exam vouchers are purchased you have up to one year from the date of purchase to use it. Each voucher is valid for one exam and may only be used at an Authorized
Teaching an Introductory Computer Science Sequence with Python
Teaching an Introductory Computer Science Sequence with Python Bradley N. Miller Department of Computer Science Luther College Decorah, Iowa 52101 [email protected] David L. Ranum Department of Computer
Threads Scheduling on Linux Operating Systems
Threads Scheduling on Linux Operating Systems Igli Tafa 1, Stavri Thomollari 2, Julian Fejzaj 3 Polytechnic University of Tirana, Faculty of Information Technology 1,2 University of Tirana, Faculty of
Integration of Application Business Logic and Business Rules with DSL and AOP
e-informatica Software Engineering Journal, Volume 4, Issue, 200 Integration of Application Business Logic and Business Rules with DSL and AOP Bogumiła Hnatkowska, Krzysztof Kasprzyk Faculty of Computer
CS 111 Classes I 1. Software Organization View to this point:
CS 111 Classes I 1 Software Organization View to this point: Data Objects and primitive types Primitive types operators (+, /,,*, %). int, float, double, char, boolean Memory location holds the data Objects
Realizing Enterprise Integration Patterns in WebSphere
Universität Stuttgart Fakultät Informatik, Elektrotechnik und Informationstechnik Realizing Enterprise Integration Patterns in WebSphere Thorsten Scheibler, Frank Leymann Report 2005/09 October 20, 2005
Java Application Developer Certificate Program Competencies
Java Application Developer Certificate Program Competencies After completing the following units, you will be able to: Basic Programming Logic Explain the steps involved in the program development cycle
DIPLOMADO DE JAVA - OCA
DIPLOMADO DE JAVA - OCA TABLA DE CONTENIDO INTRODUCCION... 3 ESTRUCTURA DEL DIPLOMADO... 4 Nivel I:... 4 Fundamentals of the Java Programming Language Java SE 7... 4 Introducing the Java Technology...
