On Fri, 5 Apr 2013, Andrew Haley wrote:
On 04/05/2013 12:39 PM, Bjorn Lindgren wrote:
I would like to know if the built-in __atomic_* function calls are always
garanteed to succeed? If for example multiple threads on different
sockets/cores call the __atomic function on a globaly shared variable at
same time, are the calls then queued and executed?
I can't tell exactly what this question means. I think you're asking if,
for example, an atomic_fetch-and-modify might fail to modify its target.
The answer is no: while the cmpxchg fails it will retry.
Well, that was what I wanted to find out, do I need error handling if the
event of a colliction (two cores exectuing CMPXCHG within the same clock
cycles), the instruction will be automaticly retried until it succeeds?
Is that true for the x86 asm implementations of __atomic_*_fetch /
__atomic_fetch_* calls too, that they are retried?
As I understand each core has it's own context and instruction
pipeline so a __atomic function call collision could
occur across cores.
Regards,
Bjorn