Zwykłe wątki
Zwykłe wątki są najbardziej uniwersalnym i jednocześnie najbardziej skomplikowanym sposobem na wykonywanie przetwarzania równoległego.
- C++11 std::thread - w standardzie od 2011
- poradnik: C++11 Concurrency - Part 1 : Start Threads - Baptiste Wicht, 2012
- zobacz również: C++11
- Boost.Thread - łatwie, przenośne wątki
- zobacz również: Boost
- pthreads - standard POSIX dla wątków wspierany na platformach bazujących na Un*x: FreeBSD, NetBSD, GNU/Linux, Mac OS X, Solaris
- poradniki:
- POSIX Threads Programming - Blaise Barney, 2014
- POSIX thread (pthread) libraries - Yolinux.com
- Multithreaded Programming (POSIX pthreads Tutorial) - Alfred Park, 2014
- poradniki:
- just::thread - biblioteka komercyjna dla wątków i kompilatorów wspierających C++03, napisana przez Anthony'iego Williams'a, autora książki "C++ Concurrency in Action" i opiekuna Boost.Thread
- POCO - biblioteka Open Source, zawiera wsparcie dla wielowątkowości
Od C++17 funkcja std::for_each będzie wspierać wykonanie równoległe z wersją akceptującą execution policy (parallel lub sequencial).
Asynchroniczne I/O
- A Simple Wrapper for Asynchronous File I/O (ReadFileEx, WriteFileEx) - Sudheesh.P.S, 2011
- Platform-specific I/O Objects - Boris Schäling o Boost.Asio
- Boost application performance using asynchronous I/O - M. Tim Jones, 2006 o POSIX API
- Synchronous and Asynchronous I/O - msdn, zawiera opis "overlapped I/O"
Struktury danych bez blokad (ang. lock-free)
Użyj aby zwiększyć szybkość przetwarzania rozwiązania wielowątkowego.
Artykuły
- Lock-free Programming in C++ with Herb Sutter - Sergio De Simone, 2014
- Common Pitfalls in Writing Lock-Free Algorithms - David Stolp, 2013
- An Introduction to Lock-Free Programming
- Lock-free Data Structures. 1 — Introduction
- A High Performance Lock Free Ring Queue
- Writing Lock-Free Code: A Corrected Queue - Herb Sutter, 2008
- Lock-Free Single-Producer - Single Consumer Circular Queue
- A Fast Lock-Free Queue for C++
Rozwiązania
- Concurrent Data Structures - biblioteka struktur bez blokad
- Boost.Lockfree - struktury zawarte w Boost
OpenMP
OpenMP jest standardem dla uproszczonego przetwarzania równoległego programu, wspierane przez wiele kompilatorów, w tym GCC, Visual Studio, Intel. Pozwala na wykonywanie istniejącego kodu równolegle poprzez dodanie kilku specjalnych dyrektyw.
- OpenMP - The OpenMP Architecture Review Board
- OpenMP - Wikipedia.org (wprowadzenie)
- OpenMP - Blaise Barney, 2014
- Enabling OpenMP in Windows using Code::Blocks - Parallel Programming Club, 2010
- Shared Memory Programming with OpenMP & More About OpenMP - Tim Mattson, 2013
- OpenMP in Microsoft Visual Studio - Intel Software TV, 2009
- OpenMP in 30 Minutes - Joe Landman, 2007
- Guide into OpenMP: Easy multithreading programming for C++ - Joel Yliluoma, 2007
- Begin Parallel Programming With OpenMP - uusheikh, 2007
- OpenMP for image processing - jung-kreidler, 2012
- 32 OpenMP Traps For C++ Developers - Alexey Kolosov, Andrey Karpov, Evgeniy Ryzhkov, 2009
- Tutorial – Parallel For Loops with OpenMP
- C++ Examples of Parallel Programming with OpenMP
- Using OpenMP for programming parallel threads in multicore applications: Part 2
Pamięć transakcyjna (Transactional memory)
Wprowadzenie
- Software transactional memory
- Beyond Locks: Software Transactional Memory - Bartosz Milewski, 2010
Rozwiązania
- GCC 4.7:
- Intel C++ STM - kompilator
- Intel TSX - instrukcje
- Web Resources about Intel® Transactional Synchronization Extensions - Roman Dementiev, 2013
- Studying Intel TSX Performance - Alexander Krizhanovsky
- IBM XL - kompilator + hardware
Thread Building Blocks
Rozwiązanie Open Source od Intel-a: Thread Building Blocks
Zasoby
- parallel_for_each Template Function - równoległy wariant std::for_each
- 1 minute intro: Intel TBB parallel_for
- Generic Parallel Algorithms
Książki
- "Structured Parallel Programming: Patterns for Efficient Computation" - Michael McCool / James Reinders / Arch Robison, 2012 - zawiera przykłady dla TBB i Cilk Plus
- "Intel Threading Building Blocks" - James Reinders, 2007
Concurrency Runtime
Zasoby dla: Concurrency Runtime - Visual Studio: Asynchronous Agents Library, Parallel Patterns Library
- przykład: concurrency::parallel_for_each example
- książka: "Parallel Programming with Microsoft Visual C++: Design Patterns for Decomposition and Coordination on Multicore Architectures (Patterns & Practices)" - Colin Campbell / Ade Miller, 2011
Książki o wielowątkowości
- Język C++ i przetwarzanie współbieżne w akcji - Anthony Williams, 2012
- "C++ Multithreading Cookbook" - Miloš Ljumović, 2014
Blogi o wielowątkowości
- Just Software Solutions - blog - blog techniczny wspierany przez Anthony'iego Williams'a