Control abstraction is the process by which programmers define new control constructs, specifying a statement ordering separately from an implementation of that ordering. We argue that control abstraction can and should play a central role in parallel programming. Control abstraction can be used to build new control constructs for the expression of parallelism. A control construct can have several implementations, representing the varying degrees of parallelism to be exploited on different architectures. Control abstraction also reduces the need for explicit synchronization, since it admits a precise specification of control flow. Using several examples, we illustrate these benefits of control abstraction. We also show that we can efficiently implement a parallel programming language based on control abstraction. We conclude that the enormous benefits and reasonable costs of control abstraction argue for its inclusion in explicitly parallel programming languages.