Concurrency is concerned with the conceptual and fundamental aspects underlying any system employing multiple computing agents and possessing some infrastructure for allowing these agents to interact. We refer to such systems as concurrent systems, a notion that spans a wide range of system architectures, from tightly coupled, mostly synchronous parallel systems, to loosely coupled, largely asynchronous distributed systems. Similarly, we refer to computer programs written for concurrent systems as concurrent programs.
Concurrent systems are intrinsically much more difficult to analyze for correctness than their sequential counterparts, for two main reasons. First, the presence of multiple threads of control can lead to subtle and often unanticipated interagent interactions; in particular, issues such as interference, race conditions, deadlock, and livelock are peculiar to concurrent programming. Secondly, many concurrent systems are reactive, meaning that they are designed to engage in an ongoing series of interactions with their environments; examples of such systems include operating systems, database systems, and air-traffic control systems. Unlike sequential programs, reactive systems should not terminate, and consequently traditional notions of correctness that rely on relating inputs to expected outputs upon termination no longer apply.
Researchers in other areas of computer science have developed techniques for dealing with the correctness of concurrent systems in specific settings, such as operating systems and distributed database systems. Devising general models for concurrent computation and widely applicable approaches to specifying and verifying reactive systems has provided the impetus for the research undertaken in the concurrency community.
The remainder of this report develops along the following lines. The next section discusses the current state of concurrency research; the section following then presents strategic directions for future investigation. Finally, some concluding remarks are given.