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.