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.
/dev/old/comments