- Course type
- Paid course
- 7 hours
- 54 lessons
- Available on completion
- Course author
- James Raynard
- How to write portable threaded C++ applications which unleash the power of modern multi-core hardware
- Basic principles of multi-threading which will be applicable in all languages
An understanding of multithreading is essential to make full use of the capabilities of modern hardware.
Modern C++ provides direct support for threads, so it is now possible to write multithreaded programs in C++ which are portable and have well-defined behaviour, without requiring external libraries.
This course focuses on the principles of multithreading, using Modern C++. No previous knowledge of multithreading is required but you should be familiar with programming in C++.
The course begins by reviewing the features of Modern C++ which are used in this course. If you feel you require a more thorough coverage of Modern C++, you can get this by taking my course "Learn Advanced Modern C++".
We then cover the basic concepts of multithreading and learn how to launch threads in C++. We look at the problems which can occur with multiple threads and how to avoid them.
C++ provides tools which allow us to work at a higher level of abstraction than system threads using shared data; we cover condition variables and promises with futures. We will also look at asynchronous, lock-free and parallel programming, including the parallel algorithms in C++17. Finally, we will implement a concurrent queue and thread pool, which you can use in your own code.
There are downloadable exercises for each video, with solutions, so you can check your understanding as you learn, gaining familiarity and confidence with the material. Each section has a workshop which has more challenging questions. Source code is provided for the examples.
I will be actively supporting the course and I will respond promptly if you have any questions or experience difficulties with the course content. Please feel free to use the Q&A feature or alternatively you can send me a private message.