In this section, we present an overview of the different concurrency libraries that we learned about. We take a step back and look at the differences between these libraries, and what they have in common. This summary will give us an insight into what different concurrency abstractions are useful for.
A concurrency framework usually needs to address several concerns:
It must provide a way to declare data that is shared between concurrent executions
It must provide constructs for reading and modifying program data
It must be able to express conditional execution, triggered when a certain set of conditions are fulfilled
It must define a way to start concurrent executions
Some of the frameworks from this book address all these concerns; others address only a subset, and transfer part of the responsibility to another framework.
Typically, in a concurrent programming model, we express concurrently shared data differently from data intended to be accessed only from...