As we know, the compiler or the CPU may reorder the execution as they want, only if they follow the as-if rule. For example, if we have such a piece of code:
C = A + B;
D = E + F;
The compiler or the CPU may execute D = E + F before C = A + B. I can understand that.
Now let's talk about another case.
Saying that I have two threads a and b. I want to set some marks while executing so that I can monitor the whole process of a and b.
queue q; // thread safe
void thread_a()
{
// do something
q.push("a - 1");
// do something
q.push("a - 2");
}
void thread_b()
{
// do something
q.push("b - 1");
// do something
q.push("b - 2");
}
My question is: since we have the as-if rule and the execution order may be reordered, does it mean that the messages in the q is not reliable? Meaning that the real execution order is a - 1, b - 1, b - 2 and a - 2 but in the q there might be a - 1, a - 2, b - 1 and b - 2? If this could happen, how should I design or which kind of techinque should I use to monitor the process of multi-threading?
Aucun commentaire:
Enregistrer un commentaire