Durante esses dias discutindo com um amigo sobre o acesso a memoria de forma atômica, e durante alguns testes e provas de conceito surgiram alguns problemas devido ao esquema de synchronize ser um recurso dependente da plataforma e compilador.
Como a chamada __sync_synchronize() e nativa no compilador, e dependendo da versão não vai estar disponivel. segue abaixo uma solução:
Contornando o Problema
#include <stdio.h>
#ifdef NO_SYNC_SYNCHRONIZE
#warning "Ops! Don't have native __sync_synchronize(), using the asm hardcode."
# define __sync_synchronize() __asm__ __volatile__ ( "rep;nop": : :"memory" );
#endif
#define my__sync_synchronize() __sync_synchronize()
int
main ()
{
int foo = 0;
printf ("Trecho abaixo será atômico!\n");
foo = 0xd34db33f;
my__sync_synchronize ();
return 0;
}
* Levando em consideração o uso sobre a plataforma x86.





