Hi On Mon, Oct 23, 2017 at 04:43:19PM +0100, Mark Thompson wrote: > On 23/10/17 03:56, Michael Niedermayer wrote: > > the initialization should be thread safe as it never writes a different > > value in the same spot > > This is not true; please be very careful with assumptions like this. > > The C standard calls this a data race and it is undefined behaviour.
Thats interresting, we definitly do not want undefined behavior can you quote the relevant parts of the C standard which make writing the same value, a data race ? I was not aware of this if its true. Also i dont immedeatly see this in the "latest" draft i am looking at atm What i see is this: 4 Two expression evaluations conflict if one of them modifies a memory location and the other one reads or modifies the same memory location. ... 25 The execution of a program contains a data race if it contains two conflicting actions in different threads, at least one of which is not atomic, and neither happens before the other. Any such data race results in undefined behavior. This seems carefully worded to not include writing the same value. As "modification" implies change which does not occur when writing the same value. > > It is not just a theoretical concern, either - on architectures with > destructive write-hint instructions ("fill cache line with unspecified data > without loading it from memory, because I'm about to overwrite all of it", > exactly what you want to use (and therefore the compiler will generate) to > avoid pointless loads when overwriting a large table) other threads can and > do see different contents transiently when the same data is written to the > location. This might violate: 27 NOTE 13 Compiler transformations that introduce assignments to a potentially shared memory location that would not be modified by the abstract machine are generally precluded by this standard, since such an assignment might overwrite another assignment by a different thread in cases in which an abstract machine execution would not have encountered a data race. This includes implementations of data member assignment that overwrite adjacent members in separate memory locations. We also generally preclude reordering of atomic loads in cases in which the atomics in question may alias, since this may violate the "visible sequence" rules. [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB "You are 36 times more likely to die in a bathtub than at the hands of a terrorist. Also, you are 2.5 times more likely to become a president and 2 times more likely to become an astronaut, than to die in a terrorist attack." -- Thoughty2
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel