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.

Mais sobre o assunto.