Team Liquid - Shop now
Buy new:
-40% $44.66
$4.58 delivery December 11 - 13
Ships from: EchoPointBooks
Sold by: EchoPointBooks
$44.66 with 40 percent savings
List Price: $74.95
$4.58 delivery December 11 - 13. Details
In Stock
$$44.66 () Includes selected options. Includes initial monthly payment and selected options. Details
Price
Subtotal
$$44.66
Subtotal
Initial payment breakdown
Shipping cost, delivery date, and order total (including tax) shown at checkout.
Ships from
✅EchoPointBooks
Ships from
✅EchoPointBooks
Returns
Returnable until Jan 31, 2025
Returnable until Jan 31, 2025
For the 2024 holiday season, eligible items purchased between November 1 and December 31, 2024 can be returned until January 31, 2025.
Returns
Returnable until Jan 31, 2025
For the 2024 holiday season, eligible items purchased between November 1 and December 31, 2024 can be returned until January 31, 2025.
Payment
Secure transaction
Your transaction is secure
We work hard to protect your security and privacy. Our payment security system encrypts your information during transmission. We don’t share your credit card details with third-party sellers, and we don’t sell your information to others. Learn more
Payment
Secure transaction
We work hard to protect your security and privacy. Our payment security system encrypts your information during transmission. We don’t share your credit card details with third-party sellers, and we don’t sell your information to others. Learn more
$36.00
Connecting readers with great books since 1972! Used textbooks may not include companion materials such as access codes, etc. May have some wear or writing/highlighting. We ship orders daily and Customer Service is our top priority! Connecting readers with great books since 1972! Used textbooks may not include companion materials such as access codes, etc. May have some wear or writing/highlighting. We ship orders daily and Customer Service is our top priority! See less
$3.99 delivery December 16 - 20. Details
Or fastest delivery December 12 - 17. Details
Only 1 left in stock - order soon.
$$44.66 () Includes selected options. Includes initial monthly payment and selected options. Details
Price
Subtotal
$$44.66
Subtotal
Initial payment breakdown
Shipping cost, delivery date, and order total (including tax) shown at checkout.
Access codes and supplements are not guaranteed with used items.
Ships from and sold by HPB-Red.
Kindle app logo image

Download the free Kindle app and start reading Kindle books instantly on your smartphone, tablet, or computer - no Kindle device required.

Read instantly on your browser with Kindle for Web.

Using your mobile phone camera - scan the code below and download the Kindle app.

QR code to download the Kindle App

Follow the authors

Something went wrong. Please try your request again later.

The Art of Multiprocessor Programming 2nd Edition

4.4 4.4 out of 5 stars 48 ratings

{"desktop_buybox_group_1":[{"displayPrice":"$44.66","priceAmount":44.66,"currencySymbol":"$","integerValue":"44","decimalSeparator":".","fractionalValue":"66","symbolPosition":"left","hasSpace":false,"showFractionalPartIfEmpty":true,"offerListingId":"4J9XJ4giw5R4JAq%2FkUYj2LKwGGNho%2BLnEoztD7CQmJ56aQA7wP%2BrdBoU7g%2ForS%2BRkRvEB8bEKZghd0CknFFuW1BnjwEjM1%2BFJzRWYnskcv%2FA4yyLq3o2P6qEKGmQhcgYhTFfxzGicQL17KC86AXA9cy1U1JAT%2BZxfemjhEPWD9pTXq%2FYEw9xFw%3D%3D","locale":"en-US","buyingOptionType":"NEW","aapiBuyingOptionIndex":0}, {"displayPrice":"$36.00","priceAmount":36.00,"currencySymbol":"$","integerValue":"36","decimalSeparator":".","fractionalValue":"00","symbolPosition":"left","hasSpace":false,"showFractionalPartIfEmpty":true,"offerListingId":"4J9XJ4giw5R4JAq%2FkUYj2LKwGGNho%2BLnjfyiT3Zsv4gLEQIyEvDcNZb6lTz9XRBIecuGXSoAgCdkNbLmuPP7NvhS9xef16v7pOg0ql1%2F3LGs3h84lhiQKMYAIL%2BwWYOdVEfHkLhx33CVj%2FepEWZ%2FGRvdpp4j7gifAIsmFXDq2Bj%2BeRRWGflkzIFfpysLf6No","locale":"en-US","buyingOptionType":"USED","aapiBuyingOptionIndex":1}]}

Purchase options and add-ons

The Art of Multiprocessor Programming, Second Edition, provides users with an authoritative guide to multicore programming. This updated edition introduces higher level software development skills relative to those needed for efficient single-core programming, and includes comprehensive coverage of the new principles, algorithms, and tools necessary for effective multiprocessor programming. The book is an ideal resource for students and professionals alike who will benefit from its thorough coverage of key multiprocessor programming issues.
  • Features new exercises developed for instructors using the text, with more algorithms, new examples, and other updates throughout the book
  • Presents the fundamentals of programming multiple threads for accessing shared memory
  • Explores mainstream concurrent data structures and the key elements of their design, as well as synchronization techniques, from simple locks to transactional memory systems

Frequently bought together

This item: The Art of Multiprocessor Programming
$44.66
Get it Dec 11 - 13
In Stock
Ships from and sold by ✅EchoPointBooks.
+
$41.84
Get it Dec 16 - 20
In Stock
Ships from and sold by MyPrepbooks.
+
$42.25
Get it as soon as Thursday, Dec 12
In Stock
Ships from and sold by Amazon.com.
Total price: $00
To see our price, add these items to your cart.
Details
Added to Cart
spCSRF_Treatment
These items are shipped from and sold by different sellers.
Choose items to buy together.

Editorial Reviews

Review

"The book is largely self-contained, has countless examples, and focuses on what really matters. As such, it is very well suited for both a teaching environment and for practitioners looking for an opportunity to learn about this topic...The book is written in a way that makes multiprocessor programming accessible. This updated version will further confirm its status as a classic." --ComputingReviews.com, 2013

Review

Provides an ideal resource for students and professionals alike who will benefit from thorough coverage of key multiprocessor programming issues

Product details

  • ASIN ‏ : ‎ 0124159508
  • Publisher ‏ : ‎ Morgan Kaufmann; 2nd edition (October 27, 2020)
  • Language ‏ : ‎ English
  • Paperback ‏ : ‎ 576 pages
  • ISBN-10 ‏ : ‎ 9780124159501
  • ISBN-13 ‏ : ‎ 978-0124159501
  • Item Weight ‏ : ‎ 2.56 pounds
  • Dimensions ‏ : ‎ 7.8 x 1 x 9.8 inches
  • Customer Reviews:
    4.4 4.4 out of 5 stars 48 ratings

About the authors

Follow authors to get new release updates, plus improved recommendations.

Customer reviews

4.4 out of 5 stars
48 global ratings
The Kindle version is hard to read
2 out of 5 stars
The Kindle version is hard to read
Whether using the app on Android or a Kindle e-reader, the font size differences are so ridiculous that the text is practically illegible. I don't want to read using 10x magnified text to see 0.5x words. The same problem occurs with all the images. I've been reporting the content formatting issues but haven't had any response in weeks. This is super frustrating.
Thank you for your feedback
Sorry, there was an error
Sorry we couldn't load the review

Top reviews from the United States

Reviewed in the United States on December 7, 2008
The Art of Multiprocessor Programming is an outstanding text that will soon become a classic. I give a chapter by chapter review of it below.

Practitioners that are already well versed in parallel programming can jump directly to Chapter 7, however, I would suggest at least skimming Chapters 2, 3 and 4. Even those programmers who understand shared memory and locking may be shocked at how relaxed memory models or compiler optimizations can reorder operations causing innocent looking code to break.

----------------------------------------

Chapter 1 - Introduction

Why is this book called "The Art of Multiprocessor Programming" and not "The Art of Parallel Programming?" It is not by accident. There is a directed effort to explain parallel programming concepts as they relate to multi-core (or many-core) architectures. In particular, shared-memory multiprocessors have specific implementation details, such as cache coherence policies, that directly affect parallel software run on such architectures. The introduction gives a brief overview of the direction of the text: principles and practice.

----------------------------------------

Part 1 - Principles

Chapter 2 - Mutual Exclusion

Mutual exclusion is a key concept to multi-threaded programming, and this chapter is rightly placed at the beginning of the text. This chapter presents some of the foundational concepts in parallel computing, such as, understanding time related to operation interleavings, pessimistic critical sections, forward progress, deadlocks and fairness. In addition, some of the classic algorithms are presented here, such as Lamport's Ticket Locking and Peterson's 2-Threaded Lock.

Chapter 3 - Concurrent Objects

This chapter starts off simple, but gets complex fast. While experts will understand and acknowledge the importance of this chapter, less experienced programmers will find it very challenging to understand and may be turned off: don't give up!

My suggestion to non-experts is to focus on understanding two concepts of this chapter: hardware sequential consistency (3.4) and software linearizibility (3.5). Once you understand both concepts, skim all other sections except section 3.8.

Java programmers may want to pay special attention to the Java Memory Model section (3.8) and ill-formed unsynchronized code. General programmers will also be interested in this section as it is important to understand how the hardware's memory consistency model, the programming language's memory model and the compiler's operation reordering optimizations may interfere with what "looks like" correct code.

Do not be discouraged by the difficult of this chapter. It is one of the most difficult chapter in the text. Get through it and keep reading.

Chapter 4 - Foundations of Shared Memory

This chapter concentrates on understanding shared memory, the cornerstone of all multi-threaded applications. It explains how to implement shared memory that behaves "correctly" without using mutual exclusion. The different types of memory that are discussed are single-reader single-writer (SRSW), multiple-reader single-writer (MRSW) and multiple-reader multiple-writer (MRMW). This is an important chapter for non-experts to think about, as it explains how operation interleavings are not as discrete as we pretend they are and how shared memory should behave in all possible cases.

Chapter 5 - The Relative Power of Primitive Synchronization Operations

This chapter explains the varying strength of different wait-free synchronization primitives. Consensus numbers will undoubtedly confuse novice parallel programmers. In short, the higher the consensus number the better. A high consensus number, say N, for a synchronization primitive means that synchronization primitive can "correctly" solve the consensus problem for N concurrently executing threads. For example, critical sections have an infinite consensus number (e.g. support an infinite number of concurrent threads). Atomic registers have a consensus number of 1, they support only 1 thread's execution that is guaranteed to consistently and validly solve the consensus problem.

The most important point of this chapter (in my opinion) is that compare-and-swap (CAS), or compare-and-set, has an infinite consensus number (section 5.8). This is why modern instruction set architectures (ISAs) all provide CAS: it is critical to supporting an unlimited number of concurrently executing threads. Realizing the importance of CAS is vital for advanced parallel programmers who want to implement nonblocking algorithms.

Chapter 6 - Universality of Consensus

This chapter explains how to build universal consensus for your own concurrent objects. While it will be an interesting chapter for experts, novices may want to skip it.

----------------------------------------

Part II - Practice

Chapter 7 - Spinlocks and Contention

This chapter explains the important differences between different types of locking. It explains how to implement locks using assembly level operations (test-and-set and test-and-test-and-set), how to reduce bus contention using backoff, how to reduce cache pressure by having threads spin on their local cache memory and how to manage an unknown number of threads using locks.

After reading this chapter, most readers should have an appreciation for the hardware complexity of implementing something as simple as a lock. Some programmers may argue that they should not need to know how hardware behaves. While I would like to agree, the unfortunate state of multi-core programming currently requires a basic understanding of memory consistency models and cache behaviors. Herlihy and Shavit note this and make an effort to address it in a "just what you need to know" fashion, as done in this chapter.

Chapter 8 - Monitors and Blocking Synchronization

This chapter explains monitors, conditions, the differences between readers and writers, and reentrant locks. Java programmers will be especially interested in understanding monitors, while all OO programmers should have an appreciation of synchronizing an entire class. Moreover, the section on reentrant locks is simple but important to preventing deadlocks.

----------------------------------------

Unofficially, Chapters 9 - 11 focus on achieving parallelism in algorithms that have sequential bottlenecks and are therefore inherently sequential.

----------------------------------------

Chapter 9 - Linked Lists: The Role of Locking

The chapter explains how to implement ordered linked lists (e.g., IntSets or just sets) in a variety of different ways. The chapter starts out with the most basic implementation and then begins to increase performance by relaxing the strictness of the required thread synchronization.

Chapter 10 - Concurrent Queues and the ABA Problem

The chapter explains how to implement pools, a collection of unordered or ordered items. The chapter then explains the ways to implement pools as different types of queues, containers with first-in-first-out behavior. The chapter also explains a classic parallel problem known as ABA, where thread1 observes x == A, thread2 does x=B and then x=A and thread1 then observes x == A. The ABA problem is a subtle, but important problem.

Chapter 11 - Concurrent Stacks and Elimination

This chapter starts where the last chapter left off; it explains how to implement concurrent stacks, containers with first-in-last-out behavior. The chapter also explains a neat cancellation problem called elimination. Elimination is useful for avoiding overflows, underflows and other types of bounded problems.

Chapter 12 - Counting, Sorting and Distributed Coordination

This chapter explains how to take problems that seem to be inherently sequential and make them parallel. The chapter also explains both combining and diffracting trees, both of which are very interesting ways to make sequential problems parallel. This chapter is one of the more complex chapters of the text. Some readers may want to skim it.

----------------------------------------

Unofficially, Chapters 13 - 15 focus on achieving parallelism in algorithms that are inherently parallel. Readers will enjoy seeing how easy it is to extract parallelism in these naturally parallel algorithms.

----------------------------------------

Chapter 13 - Concurrent Hashing and Natural Parallelism

This chapter explains how to build parallel hash tables, with both open and closed addressing. First, the authors explain how to implement hash tables using coarse-grained locks, then with fine-grained locks, then with no locks at all. The chapter also explains how to deal with open-addressed hash tables which are particularly challenging.

Chapter 14 - Skiplists and Balanced Search

Most non-experts that make it this far in the text will be greatly rewarded by this chapter. Chapter 14 explains skiplists, an intriguing way to implement a container that has logarithmic search time and that is inherently parallel. Unlike red-black trees or balanced binary trees that yield logarithmic search time complexity, skiplists do not need to be rebalanced. Skiplists do not need to be rebalanced due to their unique algorithmic layering, making them inherently parallel. As such, skiplists have a notable benefit over their inherently sequential logarithmic search time counterparts.

This is a critically important chapter for practitioners hoping to exploit high parallelism while retaining logarithmic search time.

Chapter 15 - Priority Queues

This chapter explains how to implement priority queues, containers that are queues where each element has an identifiable level of importance. The authors demonstrate how to build priority queues with arrays, trees, heaps and skiplists.

Chapter 16 - Futures, Schedules and Work Distribution

This chapter presents some important aspects in understanding parallelism. In particular, the authors explain how to keep threads busy with work without causing the threads to become busy with "looking for work". The chapter also explains important ideas about the overhead of threads, stealing work, and sharing work. This chapter may cause some confusion to non-experts, but readers should try to understand at least the basic principles conveyed here as they are important to most general parallel programming problems.

Chapter 17 - Barriers

This chapter explains how to use barriers, a synchronization primitive that ensures threads move together through "gates" or "phases". Barriers are important in preventing threads from getting to far ahead or too far behind one another.

Chapter 18 - Transactional Memory

This chapter briefly describes a new parallel programming concept called transactional memory (TM). TM uses optimistic concurrency and greatly simplifies parallel programming. Herlihy and Shavit are responsible for HTM and STM, respectively.

The following ideas are touched on: HTM + cache coherence, composition, contention managers and transactional serialization. TM is currently receiving a lot of research attention and many researchers believe TM will soon become the new way to do parallel programming. Because of this, readers should pay particular attention to this chapter.
135 people found this helpful
Report
Reviewed in the United States on May 30, 2008
This book gives programmers the practical and theoretical tools they need to adapt to the proliferation of multi-core machines. It opens with six chapters on theoretical subjects. These chapters are fascinating in their own right as well as directly applicable to my daily work. I thought the most important subjects were wait-free synchronization (every method completes in a finite number of steps), lock-free synchronization (some method completes in a finite number of steps), and some computability proofs. The authors use computability to demonstrate the equivalence of several types of synchronization primitives. They also present some impossibility proofs that show you how to avoid trying to solve unsolvable problems. The computability results and synchronization guarantees combine to give you the tools to determine whether one concurrent algorithm is "better" than another.

The remainder of the book is devoted to practical subjects. These chapters cover locks, a variety of data structures, work scheduling, and some miscellaneous topics. Java's java.util.concurrent package provides production-quality implementations of most of these data structures. The authors know this, and they use the data structures chapters to demonstrate generally applicable techniques while avoiding unnecessary implementation details. The work scheduling chapter is a sobering reminder of the difficulty inherent in fully exploiting highly parallel architectures. The authors show how to use recurrences to analyze the relative speedup an algorithm gains by running on P processors instead of a single processor. Combining this with the discussion of Ahmdal's Law earlier in the book we see that the essential math behind parallelism severely penalizes you for seemingly small sequential portions of your code. I also found the counting networks chapter fascinating, as I had never encountered that material before.

The book also provides appendices aimed at bringing inexperienced readers up to speed. That said, I wouldn't recommend this book for inexperienced programmers. The material is challenging. If you are looking for a gentler introduction to this subject, consider Java Concurrency in Practice. Each chapter ends with a note describing the history of the material and providing pointers to the bibliography. These demonstrate that the authors have been significant contributors to this field. I do agree with the review from Vyacheslav Imameyev - some of the code samples are wrong. I think they missed "volatile" keywords in several places. I don't see this as a cookbook, so I'm still giving the book five stars.

Highly parallel machines are here to stay. Programmers need to adapt to this or suffer competitive disadvantage. This is the book to read in order to meet that challenge.
39 people found this helpful
Report
Reviewed in the United States on September 9, 2012
I think this book is a must for everyone who wants to understand concurrency. For example, compare it to "seminal" 'Java Concurrency in Practice'. That other book is really great for practitioners, but it does not always explain why this is good and that is bad. If you are not a "practitioner", but want to understand what you are doing, only this book gives you necessary background. Also, compared to the previous edition, it has greatly improved its language and now is easy to read and easy to understand. This book was missing, now its here at last.
2 people found this helpful
Report

Top reviews from other countries

Translate all reviews to English
松本
5.0 out of 5 stars 基本原理を学ぶならこの一冊
Reviewed in Japan on May 26, 2013
Herlihy教授は、linearizability、wait-free、lock-free、universality of consensus等、複数プロセッサプログラミングの基本原理に関する論文を多く出しているが、どれからどのように読めばよいか、読むのにどのような知識が必要かが分からず、進捗が鈍かった。この本は、講義ノートが基になっていて、上記が体系だてられてまとまっており、この本のおかげで初めてherlihy教授の言うことがよく分かった。それぞれの論文を読むこともできた。herlihy教授が高く評価されていることにも納得した。

翻訳版が出ているそうだが、数学的、論理的な部分をきちんと学ぶなら、英語版をお薦めしたい。

前半は数学の力を必要とするが、きちんと読むと世界が広がると思う。最初から通して読んで頂きたい。この本が教える知識を身につける人が増えて複数プロセッサプログラミングの裾野が広がることを期待する。
Stefan Wörthmüller
2.0 out of 5 stars Very Java Specific
Reviewed in Germany on June 8, 2009
Although the back of the cover states that the book covers JAVA and C++, all examples and all runtime/language specifics are in/about JAVA. The C++ pthreads library is covered on 3 Pages in the appendix. Good: exhaustive in aspects of theory. But to specific on JAVA.