A theory of action suitable for reasoning about events in multiagent or dynamically changing environments is presented. A device called a process model is used to represent the observable behavior of an agent in performing an action. This model is more general than previous models of action, allowing sequencing, selection, nondeterminism, iteration, and parallelism to be represented. It is shown how this model can be utilized in synthesizing plans and reasoning about concurrency. In particular, conditions are derived for determining whether or not concurrent actions are free from mutual interference. It is also indicated how this theory provides a basis for understanding and reasoning about action sentences in both natural and programming languages.