es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿En qué casos recibe __sync_synchronize algún argumento?

La documentación de GCC sobre __sync builtins enumera __sync_synchronize como:

__sync_synchronize (...)
>
> Esta función integrada emite una barrera de memoria completa.

Esto significa que es una función variádica (que acepta cualquier número de argumentos), pero sin un primer argumento obligatorio, lo cual no está permitido sintácticamente en el estándar C; en cualquier caso, suponiendo que pueda funcionar porque es un compilador integrado, me gustaría saber: ¿hay algún caso en absoluto en el que esta función reciba argumentos?

La documentación de GCC anterior explica por qué están presentes los ...:

Las rutinas se describen en la documentación de Intel para tomar “una lista opcional de variables protegidas por la barrera de memoria”. No está claro qué se entiende por eso; podría significar que solo se protegen las variables listadas, o podría significar una lista de variables adicionales que deben protegerse. GCC ignora la lista y la trata como vacía. GCC interpreta una lista vacía como significando que se deben proteger todas las variables accesibles globalmente.

Para una barrera de memoria completa, tiene sentido no colocar nada en el interior.

Intenté buscar en Google (por ejemplo, este sitio web contiene 30 ejemplos de uso), mirando las preguntas de Stack Overflow que contienen la función integrada y utilizando la búsqueda de código de GitHub, y no encontré ninguna llamada a __sync_synchronize con argumentos pasados a ella.

Entonces, si quiero admitir la función integrada en una herramienta, parece que simplemente podría tratarla como si estuviera declarada como __sync_synchronize(void), y siempre funcionaría.

¿Existe algún caso legítimo en el que uno desearía pasar un argumento a esa función integrada?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Según la información proporcionada en la documentación de GCC y búsquedas en línea, no parece haber ningún caso legítimo en el que uno desee pasar un argumento a la función __sync_synchronize. Siempre se describe como que no toma argumentos o tiene una lista de argumentos vacía que es ignorada por GCC. Por lo tanto, es seguro tratarlo como si estuviera declarado como __sync_synchronize(void) en cualquier herramienta o programa.

Comments are closed.