With the continued growth of multicore processing, applications containing
hundreds—or even thousands—of threads are looming on the horizon.
Designing such applications is not a trivial undertaking: programmers must
address not only the challenges outlined in Section 4.2 but additional difficulties
as well. These difficulties, which relate to program correctness, are covered in
Chapters 5 and 7.
One way to address these difficulties and better support the design of
multithreaded applications is to transfer the creation and management of