Tracing the demo application
In the demonstration code of Chapter 1, Revisiting Multithreading, we looked at a simple c++11
application which used four threads to perform some processing. In this section, we will look at the same application, but from a hardware and OS perspective.
When we look at the start of the code in the main
function, we see that we create a data structure containing a single (integer) value:
int main() { values.push_back(42);
After the OS creates a new task and associated stack structure, an instance of a vector data structure (customized for integer types) is allocated on the stack. The size of this was specified in the binary file's global data section (BSS for ELF).
When the application's execution is started using its entry function (main()
by default), the data structure is modified to contain the new integer value.
Next, we create four threads, providing each with some initial data:
thread tr1(threadFnc, 1); thread tr2(threadFnc, 2); thread tr3(threadFnc...