Compartir a través de


directiva alineado 2.6.5

La directiva de vaciado , es explícito o implícito, especifica un punto de secuencia de “entre subprocesos” en el que la implementación es necesario asegurarse de que todos los subprocesos de un equipo tengan una vista coherente de algunos objetos (especificados abajo) en memoria.Esto significa que las evaluaciones anteriores de expresiones que hagan referencia a esos objetos está completa y las evaluaciones subsiguientes aún no se han iniciado.Por ejemplo, los compiladores deben restablecer los valores de los objetos de los registros en memoria, y el hardware puede necesitar vaciar los búferes de escritura a la memoria y cargar los valores de los objetos de memoria.

La sintaxis de la directiva de vacío es la siguiente:

#pragma omp flush [(variable-list)]  new-line

Si los objetos que requieren sincronización se todos pueden designar por variables, después estas variables se pueden especificar en la variable-listaopcional.Si un puntero está presente en la variable-lista, se vacía el propio puntero, no el objeto que el puntero se hace referencia.

Una directiva de vaciado sin una variable-lista sincroniza todos los objetos compartidos excepto objetos inaccesibles con la duración automática de almacenamiento.(Esto es probable tener mayor sobrecarga que vaciado con una variable-lista.) Una directiva de vaciado sin una variable-lista es implícita para las siguientes directivas:

  • barrier

  • en la entrada a y la salida de Crtico

  • en la entrada a y la salida de ordered

  • en la entrada a y la salida de Paralelo

  • en la salida de Para

  • en la salida de secciones

  • en la salida de solo

  • en la entrada a y la salida de paralelo para

  • en la entrada a y la salida de secciones paralelas

La directiva no es implícita si una cláusula de nowait está presente.Tenga en cuenta que la directiva de vaciado no es implícito para cualquiera de los siguientes:

  • en la entrada a Para

  • en la entrada a o la salida de principal

  • en la entrada a secciones

  • en la entrada a solo

Una referencia que tiene acceso al valor de un objeto con un tipo volátil-calificado se comporta como si se vaciado de directivas especificando ese objeto en el punto de secuencia anterior.Una referencia que modifique el valor de un objeto con un tipo volátil-calificado se comporta como si se vaciado de directivas especificando ese objeto en el punto de secuencia subsiguiente.

Dado que la directiva de vaciado no tiene instrucciones de lenguaje de C/C++. como parte de la sintaxis, hay algunas restricciones en su posición dentro de un programa.Vea Apéndice C para la gramática formal.El ejemplo siguiente muestra estas restricciones.

/* ERROR - The flush directive cannot be the immediate
*          substatement of an if statement.
*/
if (x!=0)
   #pragma omp flush (x)
...

/* OK - The flush directive is enclosed in a
*      compound statement
*/
if (x!=0) {
   #pragma omp flush (x)
}

Restricciones de la directiva de vaciado son los siguientes:

  • La variable especificada en una directiva de vaciado no debe tener un tipo de referencia.