A methodology for programming with concurrency

  • Christian Lengauer
  • Eric C. R. Hehner
Systematic Design, Development, And Verification Of Parallel Algorithms
Part of the Lecture Notes in Computer Science book series (LNCS, volume 111)


A programming calculus is presented which will yield programs with simple, suitable, and safe concurrency.

The program design consists of three steps:
  1. (1)

    specification of a finite problem by a pre/post condition pair

  2. (2)

    formal refinement of a totally correct solution which can be implemented sequentially

  3. (3)

    declaration of program properties which allow relaxations in sequencing (→ concurrency)


For infinite problems programs can be executed repeatedly without correctness problems. For the choice of refinement formal guidelines can be used.

The derived solutions have the following properties:
  1. (a)

    dynamic concurrency — processes do not have to be statically declared

  2. (b)

    only correct concurrency can be specified — exclusion is not explicitly programmed

  3. (c)

    conditional concurrency — no conditional delays

  4. (d)

    stepwise proofs of parallel correctness without auxiliary variables

  5. (e)

    simply derived freedom from deadlock and starvation without appealing to a fair scheduler



Semantic Relation Total Correctness Communicate Sequential Process Conditional Delay Weak Precondition 
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. [Con63]
    Conway, M.E. A Multiprocessor System Design AFIPS FJCC 24 (1963), 139–146Google Scholar
  2. [Dij68]
    Dijkstra, E.W. Co-operating Sequential Processes in "Programming Languages", F. Genuys (Ed.), Academic Press, 1968, 43–112Google Scholar
  3. [Dij76]
    Dijkstra, E.W. A Discipline of Programming Prentice-Hall, Series in Automatic Computation, 1976, 217 p.Google Scholar
  4. [GCW79]
    Good, D.I.; Cohen, R.M.; Keeton-Williams, J. Principles of Proving Concurrent Programs in Gypsy Proc. Principles of Programming Languages 1979, 42–52Google Scholar
  5. [Gri77]
    Gries, D. An Exercise in Proving Parallel Programs Correct Comm. ACM 20, 12 (Dec 77), 921–930 Corrigendum: Comm. ACM 21, 12 (Dec 78), 1048Google Scholar
  6. [GrLe80]
    Gries, D.; Levin, G. Assignment and Procedure Call Proof Rules ACM TOPLAS 2, 4 (Oct 80), 564–579Google Scholar
  7. [Heh79]
    Hehner, E.C.R. do considered od: A Contribution to the Programming Calculus Acta Informatica 11 (1979), 287–304zbMATHCrossRefGoogle Scholar
  8. [Hoa69]
    Hoare, C.A.R. An Axiomatic Basis for Computer Programming Comm. ACM 12, 10 (Oct 69), 576–580, 583Google Scholar
  9. [Hoa75]
    Hoare, C.A.R. Parallel Programming: An Axiomatic Approach Computer Languages 1, 2 (June 75), 151–160Google Scholar
  10. [Hoa78]
    Hoare, C.A.R. Communicating Sequential Processes Comm. ACM 21, 8 (Aug 78), 666–677Google Scholar
  11. [Hol72]
    Holt, R.C. Some Deadlock Properties of Computer Systems ACM Computing Surveys 4, 3 (Sept 72), 179–196Google Scholar
  12. [KnuII]
    Knuth, D.E. The Art of Computer Programming, Vol. 2: Seminumerical Algorithms Addison-Wesley, 1969, 624 p.Google Scholar
  13. [Lam77]
    Lamport, L. Proving the Correctness of Multiprocess Programs IEEE Trans. on Soft. Eng. SE-3, 2 (Mar 77), 125–143Google Scholar
  14. [OwGr76a]
    Owicki, S.S.; Gries, D. An Axiomatic Proof Technique for Parallel Programs I Acta Informatica 6 (1976), 319–340zbMATHCrossRefMathSciNetGoogle Scholar
  15. [OwGr76b]
    Owicki, S.S.; Gries, D. Verifying Properties of Parallel Programs: An Axiomatic Approach Comm. ACM 19, 5 (May 76), 279–285Google Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 1981

Authors and Affiliations

  • Christian Lengauer
    • 1
  • Eric C. R. Hehner
    • 1
  1. 1.Computer Systems Research GroupUniversity of TorontoTorontoCanada

Personalised recommendations