The execution order is not significant, you cannot predict it, and it will change from launch to launch and over time in this run.
Your projects should never depend on the flow order in any way or form.
This happens further: if N objects are waiting for a synchronization object, say, a mutex, and the mutexes are freed, there is no reliable and portable prediction of which of the waiting threads will be awakened and capture the mutex further, regardless of their relative planning priorities.
Non-determinism makes multithreaded programming difficult :-)
Axel rietschin
source share