  The performance of multiprocessor synchronization and locking protocols is a
key factor to utilize the computation power of multiprocessor systems under
real-time constraints. While multiple protocols have been developed in the past
decades, their performance highly depends on the task partition and
prioritization. The recently proposed Dependency Graph Approach showed its
advantages and attracted a lot of interest. It is, however, restricted to task
sets where each task has at most one critical section. In this paper, we remove
this restriction and demonstrate how to utilize algorithms for the classical
job shop scheduling problem to construct a dependency graph for tasks with
multiple critical sections. To show the applicability, we discuss the
implementation in Litmus^{RT} and report the overheads. Moreover, we provide
extensive numerical evaluations under different configurations, which in many
situations show significant improvement compared to the state-of-the-art.
