mardi 9 octobre 2018

i don't understand.. std::memory_order_relaxed

i'm studying c++ memory sequence.. but it's very confusing.

For example.

void sumUp(std::atomic<int>& sum, std::vector<int>& val)
{
   int tmpSum = 0;
   for(auto i = 0; i < 100; ++i) tmpSum += val[i];

   sum.fetch_add(tmpSum, std::memory_order_relaxed);
}

I don't understand that sum.fetch_add() operates after tmpSum += val[i]. Since it is not in order, can sum.fetch_add() operates before tmpSum += val[i]? So the sum is 0 possible?? Many thanks.

Aucun commentaire:

Enregistrer un commentaire