Shared states
In the previous section, we talked about the patterns suggesting that we require a concurrent system of tasks. Before that, we also briefly explained how the uncertainty in the pattern of context switches during the execution of a number of concurrent tasks, together with having a modifiable shared state, can lead to non-determinism occurring in the overall states of all tasks. This section provides an example to demonstrate how this non-determinism can be problematic in a simple program.
In this section, we are going to continue our discussion and bring in shared states to see how they contribute to the non-determinism we talked about. As a programmer, the term state should remind you of a set of variables and their corresponding values at a specific time. Therefore, when we are talking about the overall state of a task, as we defined it in the first section, we are referring to the set of all existing non-shared variables, together with their corresponding values...