  |
State Threads Library - http://state-threads.sourceforge.net/
Small application library for writing fast, highly scalable Internet programs on Unix-like platforms. Open source, MPL or GPL. |
  |
Fundamentals of Multithreading - http://www.slcentral.com/articles/01/6/multithreading/
Technical article, covering Amdahl's Law, latencies and bandwidth, on-chip multiprocessing, Jackson technology, and simultaneous multithreading. (SystemLogic.net) |
  |
A Thread Performance Comparison - http://www.usenix.org/publications/library/proceedings/usenix-nt98/full_papers/zabatta/zabatta_html/zabatta.html
Compares Windows NT and Solaris on a symmetric multiprocessor machine. |
  |
comp.programming.threads FAQ - http://www.lambdacs.com/cpt/FAQ.html
Bil Lewis's collection of frequently asked questions. |
  |
Survey of Threads - http://www.northco.net/chenke/project/project2.html
Comparing Solaris, Linux, and Windows NT threads. |
  |
Multi-threaded Algorithm Implementations - http://broadcast.oreilly.com/2009/06/may-column-multithreaded-algor.html
Explores effective uses of threads by looking at a multi-threaded implementation of the QuickSort algorithm and reports on situations where using threads will not help. |
  |
It's (Not) All Been Done - http://www.gotw.ca/publications/guest-ed-200609.htm
Every decade or so there is a major revolution in the way software is developed. But, unlike the object and web revolutions, the concurrency revolution can be seen coming. |
  |
Generic Synchronization Policies in C++ - http://www.ciaranmchale.com/gsp/
Most uses of synchronization code in multi-threaded applications fall into a small number of high-level “usage patterns”, or what can be called generic synchronization policies (GSPs). This paper illustrates how the use of such GSPs simplify the writing of thread-safe classes. In addition, this paper presents a C++ class library that implements commonly-used GSPs. |
  |
Foundations of Multithreaded, Parallel, and Distributed Programming - http://www.pearsonhighered.com/educator/academic/product/0,,0201357526,00%2ben-USS_01DBC.html
This book teaches the fundamental concepts of multithreaded, parallel and distributed computing. Emphasizes how to solve problems, with correctness the primary concern and performance an important, but secondary, concern. (Gregory R. Andrews) |
  |
Concurrent Programming: Principles and Practice - http://www.pearsonhighered.com/educator/academic/product/0,,0805300864,00%2ben-USS_01DBC.html
This book provides an in-depth overview of underlying principles as well as practical techniques that can be used to design concurrent programs. (Greg Andrews) |
  |
Avoiding the Perils of C++0x Data Races - http://www.devx.com/cplus/Article/42725
Find out what dangers race conditions in general and C++0x data races in particular pose to concurrent code, as well as the strategies for avoiding them. |
  |
Multithreaded File I/O - http://www.ddj.com/cpp/220300055
So far multithreaded file I/O is a under-researched field. Although its simple to measure, there is not much common knowledge about it. The measurements presented here show that multithreading can improve performance of file access directly, as well as indirectly by utilizing available cores to process the data read. |
  |
Use Thread Pools Correctly: Keep Tasks Short and Nonblocking - http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=216500409
A thread pool hides a lot of details, but to use it effectively some awareness of some things a pool does under the covers is needed to avoid inadvertently hitting performance and correctness pitfalls. |
  |
Use Threads Correctly = Isolation + Asynchronous Messages - http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=215900465
Motivates and illustrate best practices for using threads - techniques that will make concurrent code easier to write correctly and to reason about with confidence. |
  |
Design for Manycore Systems - http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=219200099
This column is about why it's time right now to think about systems with lots of cores. In short: Software is the (only) gating factor; as that gate falls, hardware parallelism is coming more and sooner than many people yet believe. |
  |
The Pillars of Concurrency - http://www.ddj.com/cpp/200001985
This article makes the case that a consistent mental model is needed to talk about concurrency. |
  |
The Many Faces of Deadlock - http://www.ddj.com/cpp/209900973
Explains that deadlock can happen whenever there is a blocking (or waiting) cycle among concurrent tasks. |
  |
Apply Critical Sections Consistently - http://www.ddj.com/cpp/202401098
Critical sections are the One True Tool for guaranteeing mutual exclusion on shared variables. Like most tools, these must be applied consistently, and with the intended meanings. |
  |
Prefer Futures to Baked-In "Async APIs" - http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=222301165
Explains that it's important to separate "what" from "how" when designing concurrent APIs. |
  |
Sutter Speaks: The Future of Concurrency - http://www.devx.com/go-parallel/Article/37839
What does the future hold for concurrency? What will happen to the tools and techniques around concurrent programming? In part two of our series, concurrency guru Herb Sutter talks about these issues and what developers need to be reading to understand concurrency. |
  |
Sutter Speaks: A Conversation with the Concurrency Whisperer - http://www.devx.com/go-parallel/Article/37573
Multi- and many-core chips are entering the mainstream — and one of the first software development authorities to take note was C++ expert Herb Sutter. Thanks to his practical insights, a new generation may grok concurrency sooner than previously thought possible. |
  |
Introduction to Priority Inversion - http://www.embedded.com/story/OEG20020321S0023
Gives an introduction to priority inversion and shows a pair of techniques to avoid them. |
  |
Prefer Structured Lifetimes: Local, Nested, Bounded, Deterministic - http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=221601309
What's good for the function and the object is also good for the thread, the task, and the lock. |
  |
Priority Inheritance Protocols - http://www-md.e-technik.uni-rostock.de/ma/gol/rtsys-bib/90-toc-pcp.pdf
Use of synchronization mechanisms like semaphores, monitors, and critical regions can lead to uncontrolled priority inversion. |
 |
It's Not Always Nice To Share - http://www.ddj.com/cpp/217600495
It isn't just languages that have poor support for thread local storage, but operating systems too |
 |
Deadlock: The Problem and a Solution - http://www.codeguru.com/cpp/misc/misc/threadsprocesses/article.php/c15545/
This article explains what deadlocks are and describes ways of circumventing deadlocks. |
 |
Understanding Parallel Performance - http://www.ddj.com/cpp/211800538
Explains how to accurately analyze the real performance of parallel code and lists some basic considerations and common costs. |
 |
Fundamental Concepts of Parallel Programming - http://www.ddj.com/hpc-high-performance-computing/212002418
Explains fundamental concepts for moving from a linear to a parallel programming model |
 |
Lock Options - http://www.ddj.com/cpp/212201754
Presents a solution to races and deadlocks based on a well-known deadlock-avoidance protocol and shows how it can be enforced by the compiler. It can be applied to programs in which the number of locks is fixed and known up front. |
 |
Measuring Parallel Performance: Optimizing a Concurrent Queue - http://www.ddj.com/cpp/212201163
Shows different ways of how to write a fast, internally synchronized queue, one that callers can use without any explicit external locking or other synchronization, and compares the performance. |
 |
Writing Lock-Free Code: A Corrected Queue - http://www.ddj.com/cpp/210604448
Explores lock-free code by focusing on creating a lock-free queue. |
 |
Maximize Locality, Minimize Contention - http://www.ddj.com/hpc-high-performance-computing/208200273
Explains why in the concurrent world, locality is a first-order issue that trumps most other performance considerations. Now locality is no longer just about fitting well into cache and RAM, but to avoid scalability busters by keeping tightly coupled data physically close together and separately used data far, far apart. |
 |
Multi-threaded Debugging Techniques - http://www.ddj.com/cpp/199200938
Describes a number of general purpose debugging techniques for multi-threaded applications. |
 |
Avoid Exposing Concurrency: Hide It Inside Synchronous Methods - http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=220600388
Explains where to start when trying to add concurrency to a mass of existing code. |
 |
Software and the Concurrency Revolution - http://acmqueue.com/modules.php?name=Content&pa=showpage&pid=332
Focuses on the implications of concurrency for software and its consequences for both programming languages and programmers. (Herb Sutter and James Larus) |
 |
The Problem with Threads - http://www.computer.org/portal/site/computer/menuitem.5d61c1d591162e4b0ef1bd108bcd45f3/index.jsp?&pName=computer_level1_article&TheCat=1005&path=computer/homepage/0506&file=cover.xml&xsl=article.xsl&
Argues that for concurrent programming to become mainstream, threads must be discarded as a programming model. Nondeterminism should be judiciously and carefully introduced where needed, and it should be explicit in programs. |
 |
Break Up and Interleave Work to Keep Threads Responsive - http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=217801299
Breaking up is hard to do, but interleaving can be even subtler. |
 |
Concurrency with Erlang - http://dsonline.computer.org/portal/site/dsonline/menuitem.9ed3d9924aeb0dcd82ccc6716bbe36ec/index.jsp?&pName=dso_level1&path=dsonline/2007/10&file=w5tow.xml&xsl=article.xsl&
To avoid problems with shared state working with multiple threads, Vinoski recommends a programming language like Erlang rather than C++ or Java. |
 |
Lock-Free Code: A False Sense of Security - http://www.ddj.com/cpp/210600279
Writing lock-free code can confound anyone-even expert programmers, as Herb shows in this article. |
 |
Sharing Is the Root of All Contention - http://www.ddj.com/hpc-high-performance-computing/214100002
Sharing requires waiting and overhead, and is a natural enemy of scalability. This article focuses on one important case, namely mutable (writable) shared objects in memory, which are an inherent bottleneck to scalability on multicore systems. |