On quinta-feira, 25 de julho de 2013 13:40:55, Mandeep Sandhu wrote: > > If that increment was not atomically implemented (and to be honest, right > > now I don't know whether a "foo++" is atomic - I don't think it is, is > > it?) > > and again two threads > > Atomicity of foo++ would depend on the data type of foo, right? Maybe if > it's a short, the increment will be atomic. Thought the correct way would > be to use atomic types (or maybe use the gcc atomic extensions).
Incrementing an integer type the size of the machine's word or smaller is
atomic on x86, but not on most RISC machines (machines with read-modify-update
incrementing). Incrementing a type that is larger than the machine word, such
as long long on x86, is not atomic.
Retrieving the value of a type the size of a machine's word or smaller is
usually atomic everywhere. It is on all architectures that Qt supports.
Doing both at the same time is not atomic anywhere unless you use specialised
fetch-and-add instructions, which the compiler never generates for you.
I'm being specific because foo++ can be both things and it's impossible to know
if your code was retrieving the value before the increment:
int inc(int &foo)
{
return foo++; // not atomic anywhere
}
--
Thiago Macieira - thiago.macieira (AT) intel.com
Software Architect - Intel Open Source Technology Center
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ Interest mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/interest
