vendredi 5 janvier 2018

Does this example contains a data race? I have some more things to ask

Here is the origin question,but mine have some differences with it. C++ memory model - does this example contain a data race? My question:

//CODE-1: initially, x == 0 and y == 0
if (x) y++; // pthread 1
if (y) x++; // pthread 2

Note:The code above is written in C,not C++(without a memory model).So does it contain a data race?

From my point of view:if we view the code in Sequential Consistency memory model,there is no data race because x and y will never be both non-zero at the same time.However,we can never assume a Sequential Consistency memory model,so the compilier reordering could make a transformation that respect to the intra-thread correctness because the compiler isn't aware of the existence of thread.......right?

so the code could be transformed to:

//CODE-2
y++; if (!x) y--;
x++; if (!y) x--;

the transformation above doesn't violate the sequential correctness so it's correct.It's not the fault of the compilier, right?So I agree with the view that the CODE-1 contains a data race.What about you?

I have an extra question, C++11 with a memory model can solve this data race because the compilers are aware of the thread, so they will do their reorder according to the memory model type,right?

Aucun commentaire:

Enregistrer un commentaire