maria-developers team mailing list archive
Mailing list archive
Re: Rev 2740: Group commit for maria storage engine. in file:///Users/bell/maria/bzr/work-maria-5.2-groupcommit/
>>>>> "Oleksandr" == Oleksandr Byelkin <sanja@xxxxxxxxxxxx> writes:
Oleksandr> 10 февр. 2010, в 21:38, Sergei Golubchik написал(а):
>>>> Why use my_atomic_store32 ?
>>> As I understood idea of atomic operation it is guaranted that we will
>>> read consistent value (not one byte from one value and other one from
>>> other). Yes I remember your statement that on modern 32bit system
>>> always get it consistent, then why we made atomic operations at all?
>> Because my_atomic_store32() also adds a full memory barrier to the
>> atomic store operation. That is, if you do
>> my_atomic_store32(&a, 1);
>> my_atomic_store32(&b, 2);
>> and then in another thread
>> if (my_atomic_load32(&b) == 2)
>> here you can be sure that a==1, because a=1 was executed before
>> b=2. And neither compiler nor the cpu swapped two assignments.
Oleksandr> In other words it is real current value of the variable in all
Oleksandr> threads. It looks like what I need.
Yes, but if you are only looking at one value, without regard of the
other, then you don't need to use my_amtoc_load32()
Another problem is that if the variables are related in any way,
atomic_load32 is not good enough as you can get 'a' and 'b' from
different instances in time.
T1: my_atomic_store32(&a, 1);
T1: my_atomic_store32(&b, 2);
T2: my_atomic_store32(&a, 3);
T2: my_atomic_store32(&b, 4);
T3: a1= my_atomic_load32(&a);
T3: b1= my_atomic_load32(&b);
this means that you can get the following values for a1 and b1:
a1= 0 b1= 0
a1= 0 b1= 2
a1= 1 b1= 2
a1= 1 b1= 4
a1= 3 b1= 2
a1= 3 b1= 4
Is this really what you want ?
Will your current code work in this senario?