Best Practices for Error Handling in Concurrent Programming
Explore how to handle errors effectively in concurrent C++ programs by using futures and promises to communicate between threads without shared variables or explicit locking. Learn to simplify concurrency with std::packaged_task and std::async, enabling asynchronous task execution and robust error management.
We'll cover the following...
Returning data and handling errors
The examples presented in this chapter have used shared variables to communicate the state between threads. We have used mutex locks to ensure that we avoid data races. Using shared data with mutexes, as we have been doing, can be very hard to do correctly when the size of a program increases. There is also a lot of work in maintaining code that uses explicit locking spread out over a code base. Keeping track of shared memory and explicit locking moves us further away from what we want to accomplish and spend time on when writing a program.
In addition, we haven’t dealt with error handling at all yet. What if a thread needs to report an error to some other thread? How do we do that using exceptions, as we are used to doing when a function needs to report a runtime error?
In the standard library <future> header, we can find some class templates that help us with writing concurrent code without global ...