A complete dynamic processor self-scheduling approach for general nested loops is presented. General nested loops contain both parallel and serial loops, and the execution time of their iterations can vary widely. In the authors' scheme, an instance of the innermost loop is considered to be the basic unit in a precedence graph. An instance is said to be active if the instance is ready to be executed. Completion of an instance will activate instances of other innermost loops. The basic concept is to keep all processors busy as long as there exists any active instance. By effectively using synchronization primitives provided in a parallel processing system, the overhead of the approach can be significantly reduced. The data structure needed to represent a general nested loop is also presented.