Communicating sequential processes

  title={Communicating sequential processes},
  author={Charles Antony Richard Hoare},
  journal={Commun. ACM},
  • C. Hoare
  • Published 1978
  • Computer Science
  • Commun. ACM
This paper suggests that input and output are basic primitives of programming and that parallel composition of communicating sequential processes is a fundamental program structuring method. When combined with a development of Dijkstra's guarded command, these concepts are surprisingly versatile. Their use is illustrated by sample solutions of a variety of a familiar programming exercises. 

Figures from this paper

Communicating sequential processes

This paper suggests that input and output are basic primitives of programming and that parallel composition of communicating sequential processes is a fundamental program structuring method. When

Design and development of concurrent programs

This work obtains a maximal independence between a set of sequential processes which communicate information during their computation generally in an asynchronous way, applicable to numerical or non-numerical algorithms.

Relational Semantics of Strongly Communicating Sequential Processes

Rules are presented that show how to find a non-deterministic sequential program "equivalent" to the original parallel program.

Distributed processes: a concurrent programming concept

The paper gives several examples of distributed processes and shows that they include procedures, coroutines, classes, monitors, processes, semaphores, buffers, path expressions, and input/output as special cases.

A Refinement of Communicating Processes

A refinement calculus of parallel specifications is introduced in which processes refine the safety properties and communications refine the liveness one in the programming of MIMD multiprocessors.

A simple model of distributed programs based on implementation-hiding and process autonomy

This paper presents a model for a network of communicating processes that stresses the notion of implementation-hiding, i.e. the invoker of a process or procedure has no knowledge of the implementation of the invoked computation.

Output Guards and Nondeterminism in “Communicating Sequential Processes”

This paper points out two problems that arise in connection with guarded commands and nondeterminism in a language for concurrent programming and addresses one of them.

Composition of concurrent programs

  • A. GopalK. Perry
  • Computer Science
    [1993] Proceedings. The 13th International Conference on Distributed Computing Systems
  • 1993
A model and a notation are developed for specifying the composition of concurrent programs that requires not only intraprocessor coordination but also interprocessor coordination within a single uniform framework.

Concurrent communication and synchronization mechanisms

This paper deals with many of the proposed communication and synchronization primitives and compares them from the perspective of their implementability and treats four basic criteria: the length of synchronization, process termination, deadlock and protocol complexity.

Analysis tool for parallel systems

  • O. J. SaizA. Tyrrell
  • Computer Science
    1993 Euromicro Workshop on Parallel and Distributed Processing
  • 1993
The generated trace set is useful as a static testing tool for the detection of faults within a design, such as deadlocks or incorrect communication structures.



The programming language Concurrent Pascal

  • P. B. Hansen
  • Computer Science
    IEEE Transactions on Software Engineering
  • 1975
The main contribution of Concurrent Pascal is to extend the monitor concept with an explicit hierarchy of access rights to shared data structures that can be stated in the program text and checked by a compiler.

The programming language PASCAL

  • J. Wakerly
  • Computer Science
    Microprocess. Microsystems
  • 1979

Design of a separable transition-diagram compiler

A COBOL compiler design is presented which is compact enough to permit rapid, one-pass compilation of a large subset of COBOL on a moderately large computer. Versions of the same compiler for smaller

The specification of process synchronization by path expressions

It is shown that the method's ability to express synchronization rules is equivalent to that of P and V operations, and a means of automatically translating path expressions to existing primitive synchronization operations is given.

Monitors: an operating system structuring concept

This paper develops Brinch-Hansen's concept of a monitor as a method of structuring an operating system. It introduces a form of synchronization, describes a possible method of implementation in

Guarded commands, nondeterminacy and formal derivation of programs

So-called “guarded commands” are introduced as a building block for alternative and repetitive constructs that allow nondeterministic program components for which at least the activity evoked, but

The Semantics of a Simple Language for Parallel Programming

  • G. Kahn
  • Computer Science
    IFIP Congress
  • 1974
A simple language for parallel programming is described and its mathematical properties are studied to make a case for more formal languages for systems programming and the design of operating systems.

Co-operating sequential processes

The final author version and the galley proof are versions of the publication after peer review that features the final layout of the paper including the volume, issue and page numbers.

Report of Algorithmic Language ALGOL 68

Working Group 2.1 on ALGOL of the International Federation for Information Processing has discussed the development of “ALGOL X”, a successor to ALGol 60 since 1963, and invited written descriptions of the language based on the previous discussions.