Funciones de actualización atómica de RenderScript
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
Descripción general
Usa las siguientes funciones para actualizar valores compartidos entre varios subprocesos.
Garantizan que los valores se actualicen de forma atómica, es decir, que la memoria lea, las actualizaciones y las escrituras de memoria se realicen en el orden correcto.
Estas funciones son más lentas que sus equivalentes no atómicos, por lo que solo debes usarlas cuando se necesite sincronización.
Ten en cuenta que, en RenderScript, es probable que tu código se ejecute en subprocesos separados, aunque no los hayas creado explícitamente. El entorno de ejecución de RenderScript con frecuencia dividirá la ejecución de un kernel en varios subprocesos. La actualización de los globales debe hacerse con funciones atómicas. Si es posible, modifica el algoritmo para evitarlos por completo.
Resumen
Funciones
rsAtomicAdd
: Adición segura para subprocesos
Parámetros
dirección | Dirección del valor que se modificará. |
valor | Importe para agregar |
Devuelve
Valor de *addr antes de la operación. |
Agrega de forma atómica un valor al valor en addr, es decir, *addr += value
.
rsAtomicAnd
: a nivel de bits y con protección de subprocesos
Parámetros
dirección | Dirección del valor que se modificará. |
valor | Valor para y con. |
Devuelve
Valor de *addr antes de la operación. |
Realiza atómicamente un bit a bit y de dos valores, y almacena el resultado en addr, es decir, *addr &= value
.
rsAtomicCas
: Comparación y configuración de subprocesos seguros
Parámetros
dirección | Dirección del valor que se comparará y reemplazará si se aprueba la prueba. |
compararValor | Valor con el que se realizará la prueba *. |
Valornuevo | Valor que se escribirá si se aprueba la prueba. |
Devuelve
Valor de *addr antes de la operación. |
Si el valor en addr coincide con comparaValue, entonces el newValue se escribe en addr, es decir, if (*addr == compareValue) { *addr = newValue; }
.
Para comprobar que el valor se escribió, comprueba que el valor que muestra rsAtomicCas() sea compararValue.
rsAtomicDec
: disminución de seguridad de subprocesos
Parámetros
dirección | Dirección del valor que se disminuirá. |
Devuelve
Valor de *addr antes de la operación. |
Resta de forma atómica uno del valor en la dirección. Esto equivale a rsAtomicSub(addr, 1)
.
rsAtomicInc
: Incremento seguro para subprocesos
Parámetros
dirección | Dirección del valor que se va a incrementar. |
Devuelve
Valor de *addr antes de la operación. |
Suma uno de forma atómica al valor a la dirección. Esto equivale a rsAtomicAdd(addr, 1)
.
rsAtomicMax
: máximo seguro para subprocesos
Parámetros
dirección | Dirección del valor que se modificará. |
valor | Valor de comparación. |
Devuelve
Valor de *addr antes de la operación. |
Establece de forma atómica el valor de addr al máximo de *addr y valor, es decir, *addr = max(*addr, value)
.
rsAtomicMin
: Mínimo de seguridad para subprocesos
Parámetros
dirección | Dirección del valor que se modificará. |
valor | Valor de comparación. |
Devuelve
Valor de *addr antes de la operación. |
Establece de forma atómica el valor a addr al mínimo de *addr y valor, es decir, *addr = min(*addr, value)
.
rsAtomicOr
: a nivel de bits seguro para subprocesos o
Parámetros
dirección | Dirección del valor que se modificará. |
valor | Valor con o con. |
Devuelve
Valor de *addr antes de la operación. |
Realiza de forma atómica uno o dos valores a nivel de bits y almacena el resultado en addr, es decir, *addr |= value
.
rsAtomicSub
: Resta segura para subprocesos
Parámetros
dirección | Dirección del valor que se modificará. |
valor | Importe que se restará. |
Devuelve
Valor de *addr antes de la operación. |
Resta de forma atómica un valor del valor a addr, es decir, *addr -= value
.
rsAtomicXor
: Exclusivo para subprocesos a nivel de bits o
Parámetros
dirección | Dirección del valor que se modificará. |
valor | Valor con el que se realizará xor. |
Devuelve
Valor de *addr antes de la operación. |
De forma atómica, realiza un xor a nivel de bits de dos valores y almacena el resultado en addr, es decir, *addr ^= value
.
El contenido y las muestras de código que aparecen en esta página están sujetas a las licencias que se describen en la Licencia de Contenido. Java y OpenJDK son marcas registradas de Oracle o sus afiliados.
Última actualización: 2024-01-03 (UTC)
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Falta la información que necesito","missingTheInformationINeed","thumb-down"],["Muy complicado o demasiados pasos","tooComplicatedTooManySteps","thumb-down"],["Desactualizado","outOfDate","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Problema con las muestras o los códigos","samplesCodeIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2024-01-03 (UTC)"],[],[]]