Communicating Sequential Processes

  • C. A. R. Hoare


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 familiar programming exercises.


Sequential Process Target Variable User Process Primitive Concept Border Node 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. Atkinson, R., and Hewitt, C. 1976. Synchronisation in actor systems. Working Paper 83, M.I.T., Cambridge, Mass., Nov.Google Scholar
  2. Brinch Hansen, P. 1975. The programming language Concurrent Pascal. IEEE Trans. Software Eng. 1, 2 (June), 199–207.CrossRefGoogle Scholar
  3. Campbell, R.H., and Habermann, A.N. 1974. The specification of process synchronisation by path expressions. Lecture Notes in Computer Science16, Springer, 89–102.CrossRefGoogle Scholar
  4. Conway, M.E. 1963. Design of a separable transition-diagram compiler. Comm. ACM6, 7 (July), 396–408.zbMATHCrossRefGoogle Scholar
  5. Dahl, O.-J., et al. 1967. SIMULA 67, common base language. Norwegian Computing Centre, Forskningveien, Oslo.Google Scholar
  6. Dijkstra, E.W. 1968. Co-operating sequential processes. In Programming Languages, F. Genuys, Ed., Academic Press, New York, 43–112.Google Scholar
  7. Dijkstra, E.W. 1972. Notes on structured programming. In Structured Programming, Academic Press, New York, 1–82.Google Scholar
  8. Dijkstra, E.W. 1975a. Guarded commands, nondeterminacy, and formal derivation of programs. Comm. ACM18, 8 (Aug.), 453–457.MathSciNetzbMATHCrossRefGoogle Scholar
  9. Dijkstra, E.W. 1975b. Verbal communication, Marktoberdorf, Aug.Google Scholar
  10. Hoare, C.A.R. 1972a. Towards a theory of parallel programming. In Operating Systems Techniques, Academic Press, New York, 61–71.Google Scholar
  11. Hoare, C.A.R. 1972b. Proof of correctness of data representations. Acta Informatica1, 4, 271–281.zbMATHCrossRefGoogle Scholar
  12. Kahn, G. 1974. The semantics of a simple language for parallel programming. In Proc. IFIP Congress 74, North Holland.Google Scholar
  13. Liskov, B.H. 1974. A note on CLU. Computation Structures Group Memo. 112, M.I.T., Cambridge, Mass.Google Scholar
  14. Mcllroy, M.D. 1968. Coroutines. Bell Laboratories, Murray Hill, N.J.Google Scholar
  15. Naur, P., Ed. 1960. Report on the algorithmic language ALGOL 60. Comm. ACM3, 5 (May), 299–314.Google Scholar
  16. Reynolds, J.C. 1965. COGENT. ANL-7022, Argonne Nat. Lab., Argonne, Ill.Google Scholar
  17. Thompson, K. 1976. The UNIX command language. In Structured Programming, Infotech, Nicholson House, Maidenhead, England, 375–384.Google Scholar
  18. van Wijngaarden, A., Ed. 1969. Report on the algorithmic language ALGOL 68. Numer. Math. 14, 79–218.zbMATHGoogle Scholar
  19. Wulf, W.A., London, R.L., and Shaw, M. 1976. Abstraction and verification in ALPHARD. Dept. of Comptr. Sci., Carnegie-Mellon U., Pittsburgh, Pa., June.Google Scholar
  20. Wirth, N. 1971. The programming language PASCAL. Acta Informatica1, 1, 35–63.MathSciNetzbMATHCrossRefGoogle Scholar

Copyright information

© Springer Science+Business Media New York 1978

Authors and Affiliations

  • C. A. R. Hoare

There are no affiliations available

Personalised recommendations