ABSTRACT

This entry introduces the reader to the problems that can arise in this area in the form of non-determinism, and the conceptual programming constructs that exist to manage and control non-determinism so that program correctness can be inferred while benefiting from the performance increases provided by supporting the execution of concurrent instruction streams. We will also see that a whole new class of correctness and performance problems arise if the mechanisms to control the effect of non-determinism are not used properly. Many of these topics are relevant in the design of network servers, operating systems, distributed systems, and parallel programs and may be familiar to readers who have studied one or more of these areas. Understanding these concepts is important as a basis to understanding the language constructs introduced later when we discuss languages with intrinsically parallel features.