7.11 Bibliographic Remarks
A number of excellent references exist for both explicit thread-based and OpenMP-based programming. Lewis and Berg [LB97, LB95a] provide a detailed guide to programming with Pthreads. Kleiman, Shah, and Smaalders [KSS95] provide an excellent description of thread systems as well as programming using threads. Several other books have also addressed programming and system software issues related to multithreaded programming [NBF96, But97, Gal95, Lew91, RRRR96, ND96].
Many other thread APIs and systems have also been developed and are commonly used in a variety of applications. These include Java threads [Dra96, MK99, Hyd99, Lea99], Microsoft thread APIs [PG98, CWP98, Wil00, BW97], and the Solaris threads API [KSS95, Sun95]. Thread systems have a long and rich history of research dating back to the days of the HEP Denelcor [HLM84] from both the software as well as the hardware viewpoints. More recently, software systems such as Cilk [BJK+95, LRZ95], OxfordBSP [HDM97], Active Threads [Wei97], and Earth Manna [HMT+96] have been developed. Hardware support for multithreading has been explored in the Tera computer system [RS90a], MIT Alewife [ADJ+91], Horizon [KS88], simultaneous multithreading [TEL95, Tul96], multiscalar architecture [Fra93], and superthreaded architecture [TY96], among others.
The performance aspects of threads have also been explored. Early work on the performance tradeoffs of multithreaded processors was reported in [Aga89, SBCV90, Aga91, CGL92, LB95b]. Consistency models for shared memory have been extensively studied. Other areas of active research include runtime systems, compiler support, object-based extensions, performance evaluation, and software development tools. There have also been efforts aimed at supporting software shared memory across networks of workstations. All of these are only tangentially related to the issue of programming using threads.
Due to its relative youth, relatively few texts exist for programming in OpenMP [CDK+00]. The OpenMP standard and an extensive set of resources is available at http://www.openmp.org. A number of other articles (and special issues) have addressed issues relating to OpenMP performance, compilation, and interoperability [Bra97, CM98, DM98, LHZ98, Thr99].