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.


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.MATHCrossRefGoogle 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.MathSciNetMATHCrossRefGoogle 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.MATHCrossRefGoogle 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.MATHGoogle 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.MathSciNetMATHCrossRefGoogle Scholar

Copyright information

© Springer Science+Business Media New York 1978

Authors and Affiliations

  • C. A. R. Hoare

There are no affiliations available

Personalised recommendations