did-you-know? rent-now

Amazon no longer offers textbook rentals. We do!

did-you-know? rent-now

Amazon no longer offers textbook rentals. We do!

We're the #1 textbook rental company. Let us show you why.

9780321434821

Concurrent Programming on Windows

by
  • ISBN13:

    9780321434821

  • ISBN10:

    032143482X

  • Edition: 1st
  • Format: Paperback
  • Copyright: 2008-10-28
  • Publisher: Addison-Wesley Professional
  • Purchase Benefits
  • Free Shipping Icon Free Shipping On Orders Over $35!
    Your order must be $35 or more to qualify for free economy shipping. Bulk sales, PO's, Marketplace items, eBooks and apparel do not qualify for this offer.
  • eCampus.com Logo Get Rewarded for Ordering Your Textbooks! Enroll Now
List Price: $64.99
  • Digital
    $68.56
    Add to Cart

    DURATION
    PRICE

Supplemental Materials

What is included with this book?

Summary

"When you begin using multi-threading throughout an application, the importance of clean architecture and design is critical. . . . This places an emphasis on understanding not only the platformrs"s capabilities but also emerging best practices. Joe does a great job interspersing best practices alongside theory throughout his book." From the Foreword by Craig Mundie, Chief Research and Strategy Officer, Microsoft Corporation Author Joe Duffy has risen to the challenge of explaining how to write software that takes full advantage of concurrency and hardware parallelism. InConcurrent Programming on Windows,he explains how to design, implement, and maintain large-scale concurrent programs, primarily using C# and C++ for Windows. Duffy aims to give application, system, and library developers the tools and techniques needed to write efficient, safe code for multicore processors. This is important not only for the kinds of problems where concurrency is inherent and easily exploitable-such as server applications, compute-intensive image manipulation, financial analysis, simulations, and AI algorithms-but also for problems that can be speeded up using parallelism but require more effort-such as math libraries, sort routines, report generation, XML manipulation, and stream processing algorithms. Concurrent Programming on Windowshas four major sections: The first introduces concurrency at a high level, followed by a section that focuses on the fundamental platform features, inner workings, and API details. Next, there is a section that describes common patterns, best practices, algorithms, and data structures that emerge while writing concurrent software. The final section covers many of the common system-wide architectural and process concerns of concurrent programming. This is theonlybook yours"ll need in order to learn the best practices and common patterns for programming with concurrency on Windows and .NET.

Author Biography

Joe Duffy is the development lead, architect, and founder of the Parallel Extensions to the .NET Framework team at Microsoft. In addition to hacking code and managing a team of developers, he works on long-term vision and incubation efforts, such as language and type system support for concurrency safety. He previously worked on the Common Language Runtime team. Joe blogs regularly at www.bluebytesoftware.com/blog.

Table of Contents

Forewordp. xix
Prefacep. xxiii
Acknowledgmentsp. xxvii
About the Authorp. xxix
Conceptsp. 1
Introductionp. 3
Why Concurrency?p. 3
Program Architecture and Concurrencyp. 6
Layers of Parallelismp. 8
Why Not Concurrency?p. 10
Where Are We?p. 11
Synchronization and Timep. 13
Managing Program Statep. 14
Synchronization: Kinds and Techniquesp. 38
Where Are We?p. 73
Mechanismsp. 77
Threadsp. 79
Threading from 10,001 Feetp. 80
The Life and Death of Threadsp. 89
Where Are We?p. 124
Advanced Threadsp. 127
Thread Statep. 127
Inside Thread Creation and Terminationp. 152
Thread Schedulingp. 154
Where Are We?p. 180
Windows Kernel Synchronizationp. 183
The Basics: Signaling and Waitingp. 184
Using the Kernel Objectsp. 211
Where Are We?p. 251
Data and Control Synchronizationp. 253
Mutual Exclusionp. 255
Reader/Writer Locks (RWLs)p. 287
Condition Variablesp. 304
Where Are We?p. 312
Thread Poolsp. 315
Thread Pools 101p. 316
Windows Thread Poolsp. 323
CLR Thread Poolp. 364
Performance When Using the Thread Poolsp. 391
Where Are We?p. 398
Asynchronous Programming Modelsp. 399
Asynchronous Programming Model (APM)p. 400
Event-Based Asynchronous Patternp. 421
Where Are We?p. 427
Fibersp. 429
An Overview of Fibersp. 430
Using Fibersp. 435
Additional Fiber-Related Topicsp. 445
Building a User-Mode Schedulerp. 453
Where Are We?p. 473
p. 475
Memory Models and Lock Freedomp. 477
Memory Load and Store Reorderingp. 478
Hardware Atomicityp. 486
Memory Consistency Modelsp. 506
Examples of Low-Lock Codep. 520
Where Are We?p. 541
Concurrency Hazardsp. 545
Correctness Hazardsp. 546
Liveness Hazardsp. 572
Where Are We?p. 609
Parallel Containersp. 613
Fine-Grained Lockingp. 616
Lock Freep. 632
Table of Contents provided by Publisher. All Rights Reserved.

Supplemental Materials

What is included with this book?

The New copy of this book will include any supplemental materials advertised. Please check the title of the book to determine if it should include any access cards, study guides, lab manuals, CDs, etc.

The Used, Rental and eBook copies of this book are not guaranteed to include any supplemental materials. Typically, only the book itself is included. This is true even if the title states it includes any access cards, study guides, lab manuals, CDs, etc.

Excerpts

I began writing this book towards the end of 2005. At the time, dual-core processors were becoming standard on the mainstream PC's that ordinary (non-programmer) consumers were buying, and a small number of people in industry had begun to make noise about the impending concurrency problem. (Herb Sutter'sThe Free Lunch is Overpaper immediately comes to mind.) The problem people were worried about, of course, was that the software of the past was not written in a way that would allow it to naturally exploit that additional compute power. Contrast that with the never-ending increase in clock speeds. No more free lunchindeed.It seemed to me that concurrency was going to be an important part of every software developer's job somewhere down the road and that a book like this would be important and useful. Just over two years later, the impact is beginning to ripple up from the operating system, through the libraries, and on up to applications themselves.This was about the same time I had wrapped up prototyping a small side-project on which I had been burning the midnight oil for the previous six months:Parallel Language Integrated Query(PLINQ). The PLINQ project was a conduit for me to explore the intricacies of concurrency, multi-core, and specifically how parallelism might be used in real-world, everyday programs. I used it as a tool to figure out where the platform was lacking. This was in addition to spending my day job at Microsoft focused onsoftware transactional memory(STM), a technology that in the intervening two years has become somewhat of an industry buzzword. Needless to say, I had become pretty entrenched in all topics concurrency. What better way to get entrenched even further than to write a book on the subject?As I worked on all of these projects, and eventually PLINQ grew intoParallel Extensions to the .NET Framework,I was amazed at how few good books on Windows concurrency were available. I remember time and time again being astonished or amazed at some intricate and esoteric bit of concurrency-related information, jotting it down, and earmarking it for inclusion in this book. I onlywishedsomebody had written it down before me, so that I didn't need to scour it from numerous sources: hallway conversations, long nights of pouring over Windows and CLR source code, and reading and rereading countless Microsoft employee blogs. But the best books on the topic dated back to the early '90s and, while still really good, focused too much on the mechanics and not on how to structure parallel programs, implement parallel algorithms, deal with concurrency hazards, and other important concepts. Everything else targeted academics and researchers, and not application, system, and library developers.I set out to write a book that I'd have found fascinating and a useful way to shortcut all of the random bits of information I had to learn throughout. Although it took me a surprisingly long two-and-a-half years to finish this book (!), the state of the art has evolved slowly, and the state of good books on the topic hasn't changed much either. The result of my efforts, I hope, is a new book that is down-to-earth and useful, but still full of very deep technical information. It is for any Windows or .NET developer who believes that concurrency is going to be a fundamental requirement of all software somewhere down the road, as all industry trends seem to imply.I look forward to kicking back and enjoying this book. And I sincerely hope you do too. Book StructureI've structured the book into four major parts. The first,Concepts,introduces concurrency at a high level without going too deep into any one topic. The next part,Mechanisms,focuses squarely on the fundamental platform features, inner workings, and API details. After that, the part onTechniquesdescribes common patterns, best practices, algorithms, and data structu

Rewards Program