Example of data race
Example 15.3 demonstrates a data race. In previous examples, we didn't have a shared state, but in this example, we are going to have a variable shared between two threads.
The invariant constraint of this example is to protect the data integrity of the shared state, plus all other obvious constraints, like having no crashes, having no bad memory accesses, and so on. In other words, it doesn't matter how the output appears, but a thread must not write new values while the value of the shared variable has been changed by the other thread and the writer thread doesn't know the latest value. This is what we mean by "data integrity":
#include <stdio.h> #include <stdlib.h> // The POSIX standard header for using pthread library #include <pthread.h> void* thread_body_1(void* arg) { // Obtain a pointer to the shared variable int* shared_var_ptr = (int*)arg; // Increment the shared variable by 1 by writing // directly...