Summary
In this chapter, we learned about working with threads that are supported by the C++ Standard Library. This is fundamental if we want to write robust, fast, and clear multithreaded applications.
We started by looking at general concepts regarding concurrency – what parallel, concurrent, synchronous, asynchronous, and threaded execution is. Having a clear understanding of these concepts allowed us to understand the architectural design of the multithreaded application.
Next, we looked at the different issues that we faced while developing multithreaded applications, such as data hazards, race conditions, and deadlocks. Understanding these issues helped us build a clear synchronized architecture for our projects. We considered the synchronization concept on some real-life examples, which gave us a good understanding of the challenges that we may face while programming threaded applications.
Next, we tried to work with different Standard Library primitives for synchronization...