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.A.R.
