Books There are presently 17 books out on the subject. Authors! If you have a description you prefer to mine, send it in. These are books in publication to date. Each has its own plusses and minuses. I have read each of them carefully, and I have my preferences. Some I like a lot better than other. All of them are sufficient to their purposes. It's hard to give an unbiased opinion when two of the books are Dan's & mine. My favorites are "Multithreaded Programming with Pthreads" (ours), "Multithreaded Programming with Java" (also ours), "Programming with POSIX Threads" (Dave's), "ThreadTime" (Scott Norton's), "Multithreading Applications in Win32" (Beveridge & Wiener), "Java Threads"(Scott and Henry), and "Concurrent Programming in Java" (Doug's). "Programming with Threads", Kleiman, Shah, Smaalders; SunSoft Press, Feb. '96 (534 pages, source on web). It covers POSIX threads, concentrating on the Solaris implementation. It has a small, but adequate introduction, then concentrates on more advanced programming issues. The examples are good because they are very realistic and show you what to expect. They are bad because they are very realistic and obscure the main points in the text. "Effective Multithreading with OS/2", Len Dorfman, Marc J Neuberger; McGraw Hill, Nov. '95 (280 pages, source on diskette). It gives a brief introduction, then focuses the rest of the discussion on the API and examples. It covers the OS/2 API. "Programming with UNIX Threads", Charles J Northrup, John Wiley & Sons, Inc., March '96 (400 pages, source via FTP). It covers the UI threads library, focusing on the UNIXware implementation. The presentation is oriented around the API and contains numerous examples. "Multithreaded Programming with Windows NT", Thuan Q Pham, Pankaj K Garg; Prentice Hall, Jan. `96 (220 pages, source on diskette). It focuses on the NT library, and gives some comparison with other libraries. It describes concepts and designs well, but lacks many of the practical details and problems. "Pthreads Programming", Bradford Nichols, Dick Buttlar, and Jacqueline Proulx Farrell, O'Reilly & Associates, Inc., Nov. '96 (268 pages, source via FTP). Concentrates on the Digital implementation of POSIX. It gives a good explanation of the concepts, but is a little too condensed to do them justice. Includes a major section comparing the final standard to draft 4, DCE. "ThreadTime", Scott J. Norton, Mark D. Dipasquale; HP Professional Books, Dec. '96 (530 pages, source on diskette). Describes POSIX threads with concentration on the HP-UX implementation. Excellent introduction, computer science descriptions, and standards discussion. "Programming with POSIX Threads", Dave Butenhof; Addison Wesley, May `97 (380 pages, source on web). Concentrates more on architecture than any specific implementation of POSIX threads. Lucid exposition of concepts and discussion of standards from one of the guys on the committee. "Multithreading Applications in Win32", Jim Beveridge and Robert Wiener; Addison-Wesley, Jan `97 (368 pages, source on diskette). It describes Win32 threads (NT and Win95). Includes some comparison to POSIX. Excellent discussion of the practical aspects of programming Win32. Many insightful comments on both the good parts and the more problematic parts. "Multithreading Programming Techniques", Shashi Prasad; McGraw-Hill, Jan. `97 (410 pages, source on diskette and web). Describes and contrasts the multithreading libraries of POSIX, UI, Mach, Win32, and OS/2. Each library has its own chapters and its own code examples. This means that the introduction and presentation of concepts is lighter, but the examples are ported across the different platforms, making this a good reference for porting. "Threads Primer", Bil Lewis and Dan Berg; SunSoft Press, Oct. `95 (320 pages, source on web). This is the first edition of the primer which covers Solaris threads. It lacks the depth of many of the other books, but gives more extensive explanation of the fundamentals. Japanese translation available. "Concurrent Programming in Java", Doug Lea; Addison Wesley, `97 (240 pages, source on web). Describes how to write multithreaded programs in Java, using design patterns. Well-written from a computer science point-of-view, though perhaps overwhelming for the hacker-oriented. Familiarity with design patterns is a necessity. I find it better in my second reading, but I don't think I could have read it w/o previous understanding of threads. "Java Threads", Scott Oaks and Henry Wong; O'Reilly, 97 (252 pages, source on web). Describes how to write multithreaded programs in Java in a more conventional, programmer-oriented style. Explanations are clear, though often simplistic. The programs illustrate the points well, yet tend to gloss over problem areas in Java. "Using Multi-C: A Portable Multithreaded C Programming Library", Prentice Hall PTR, `94. This book describes the API and use of the MIX Multi-C library, which is a proprietary library providing similar kinds of functionality to POSIX threads. "Object-Oriented Multithreading Using C++", Cameron Hughes and Tracy Hughes; John Wiley & Sons, Inc., '97 (500 pages, source on diskette). This book focuses on how threads can fit into a classic, strict C++ hierarchy. That and the emphasis on encapsulating locking I find excellent. (And exception handling, testing, cancellation, the STL comments, etc.) I wish they'd included more real-world type code and performance issues. Basically, more MT, less hierarchy. "Multithreaded Programming with Pthreads", Bil Lewis and Dan Berg; SunSoft Press, Dec. `97 (380 pages, source on web). This is the second edition of the primer which covers POSIX. Its primary distinguishing features include extensive discussion of cancellation, hardware design, performance, software design, and error detection. "Multithreaded Programming with Java", Bil Lewis and Dan Berg; SunSoft Press, Dec. `99 (400 pages, source on web). This is the third edition of the primer which covers JAVA. Its primary distinguishing features include extensive discussion of cancellation (interruption), hardware design, performance, software design, and error detection. It explains the basis of Java threads by comparision to POSIX threads. "Win32 Multithreaded Programming", Aaron Cohen & Mike Woodring; O'Reilly, Jan. 1998 (700! pages, source on CD) I have only skimmed through it. It looks promising. A good deal of the book uses a C++ class library which the authors wrote (I don't fully approve of this approach, though they do make good use of it.). There are a great many code examples, but very few illustrations/figures. It covers a great many topics, but there are a few conspicuous holes. (The cover shot is a Portuguese Man-o'-War -- interpret that how you will!) "Designing High-Powered OS/2 Warp Applications; The Anatomy of Multithreaded Programs", David E. Reich; John Wiley & Sons, April '95 (??) (336 pages). I have not seen this book yet. (Looked for it, not in my bookstore.) "Concurrent Programming Using Java", Stephan J. Hartley; Oxford University Press, 98 (~300 pages) Designed as a classroom text. It spends a lot of time on understanding the underlying issues and alternative choices that could have been made at the expense of how the API should be used. Related Books "Advanced Windows NT: The Developer's Guide to the Win32 Application Programming Interface", Jeffrey Richter; Microsoft Press, `94. This book contains about 200 pages that cover the NT threads API and its usage. It covers the API well, contains a good amount of code, very little on the concepts. "Multithreaded Computer Architecture", A Summary of the State of the Art. Edited by Robert A. Iannucci; Kluwer Academic Publishers, `94. This book is a collection of papers dealing with hardware design considerations for building specialized machines that can support multithreaded programs. "Real-World Programming for OS/2 2.1", Derrel R. Blain, Kurt R. Delimon, and Jeff English; Sams Publishing/Prentice Hall PTR, `93. This book contains about 50 pages that cover the OS/2 threads API and its usage. It covers the API well, contains one nice example but is very short. "Solaris Multithreaded Programming Guide", SunSoft Press, `95. This is the documentation that comes with Solaris 2.4 and contains the UI API. It is also available as part of the Solaris AnswerBook® and on the web (see Vendor's Threads Pages on page 317). "Computer Architecture, a Quantitative Approach (second edition)", John L Hennessy & David A Patterson; Morgan Kaufman, Inc., `96 (800 pages). This is the definitive text on computer design-CPU, Memory System, and Multiprocessors. Not about threads pre-se, but everything underneath. Superb research and exposition! "Scalable Shared-Memory Multiprocessing", Daniel E Lenoski & Wolf-Dietrich Weber; Morgan Kaufman, Inc., `95 (340 pages). This takes up in great detail what Hennessy & Patterson describe in mere passing detail. It describes the state of SMP research as it led to the Stanford DASH machine, and now the SGI Origin series and HAL Mercury. Superb research and exposition! "Concurrency: State Models & Java Programs", Jeff Magee & Jeff Kramer John Wiley and Sons, `00 (350 pages). This is designed as a lower-level college text and does a very fine job of describing the fundamental elements of concurrent programming using Java as the language. It makes extensive use of state models to elaborate its points. It does not pretend to be a practical programming text and does not tackle any advanced topics. Hardware, asynchronous interruption, memory usage, efficency, and performance considerations are among the topics missing.