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 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. CACM August, 1978 Hoare, C. Programming, programming languages, programming primitives, program structures, parallel programming, concurrency, input, output, guarded commands, nondeterminacy, coroutines, procedures, multiple entries, multiple exits, classes, data representations, recursion, conditional critical regions, monitors, iterative arrays 4.20 4.22 4.32 CA780805 DH February 7, 1979 10:07 AM 249 4 3073 254 4 3073 272 4 3073 1102 4 3073 1109 4 3073 1140 4 3073 1188 4 3073 1306 4 3073 1323 4 3073 1358 4 3073 1380 4 3073 1464 4 3073 1491 4 3073 1665 4 3073 1767 4 3073 1781 4 3073 1781 4 3073 1787 4 3073 1787 4 3073 1949 4 3073 1989 4 3073 321 4 3073 2059 4 3073 2112 4 3073 2126 4 3073 2534 4 3073 2541 4 3073 435 4 3073 437 4 3073 463 4 3073 483 4 3073 491 4 3073 2698 4 3073 2732 4 3073 2733 4 3073 2820 4 3073 2896 4 3073 2972 4 3073 560 4 3073 583 4 3073 3037 4 3073 3039 4 3073 3043 4 3073 3073 4 3073 3073 4 3073 3073 4 3073 3155 4 3073 627 4 3073 631 4 3073 632 4 3073 642 4 3073 644 4 3073 653 4 3073 680 4 3073 761 4 3073 762 4 3073 763 4 3073 123 4 3073 140 4 3073 919 4 3073 989 4 3073 196 5 3073 2732 5 3073 3073 5 3073 3073 5 3073 3073 5 3073 3148 5 3073 3150 5 3073 3155 5 3073 799 5 3073 1860 6 3073 2060 6 3073 2204 6 3073 2247 6 3073 2704 6 3073 2817 6 3073 2842 6 3073 2865 6 3073 2939 6 3073 2939 6 3073 2940 6 3073 2941 6 3073 2943 6 3073 3073 6 3073 3073 6 3073 3073 6 3073 3148 6 3073 799 6 3073